很多情况下都需要用到 Context,由于大部分操作都是在活动中进行的,而活动本身就是一个 Context 对象,所有只需要Activity.this 就可以轻松获得 Context对象。
但是,当应用程序的架构逐渐复杂起来的时候,很多的逻辑代码都将脱离 Activity 类,这种情况下获取 Context并非是那么轻松的一件事。
Android 提供了一个 Application 类,每当应用程序启动的时候,系统就会自动将这个类进行初始化。
定制一个 Application 以便于管理程序内全局状态的信息,比如 Context,代码如下:
public class MyApplication extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
//得到一个应用程序级别的 Context
context = getApplicationContext();
}
public static Context getContext() {
return context;
}
}
接下来需要在 AndroidManifest 文件的<application>标签下指定程序启动时初始化 MyApplication 类:
<application android:name="MyApplication">...</application>
这样就实现了一种全局获取 Context 的机制,之后不管你想在项目的任何地方使用 Context,只需要调用一下 MyApplication.getContext() 方法就可以了:
Toast.makeText(MyApplication.getContext(),"全局Context获取成功",Toast.LENGTH_SHORT).show();
使用 Intent 传递对象
Intent 的 putExtra( )方法中所支持的数据类型是有限的,当你想去传递一些对象的时候就需要将这些对象进行序列化。
序列化表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。
对象序列化的方法很简单,只需要让一个类去实现 Serializable 这个接口就可以了。
public class Festival implements Serializable {
private String name;
private String data;
public Festival(String name,String data){
this.name = name;
this.data = data;
}
public String getName() {
return name;
}
public String getData() {
return data;
}
}
接下来在 FirstActivity 中创建一个 Festival 实例,然后直接将它传入到 putExtra()方法中。
Festival festival = new Festival("元旦节","1月1日");
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("festival_object", festival);
startActivity(intent);
最后在 SecondActivity 中调用 getSerializableExtra() 方法获取这个对象。
Person person = (Person)getIntent().getParcelableExtra("person_object");
如此一来,我们就成功实现了使用 Intent 传递对象的功能了。
热门评论
哪里来的Person
又长知识了,之前竟然没用过application
哪里来的PERSON