手记

Android 全局获取Context & Intent传递对象

全局获取 Context

很多情况下都需要用到 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 传递对象的功能了。

12人推荐
随时随地看视频
慕课网APP

热门评论

哪里来的Person

又长知识了,之前竟然没用过application

哪里来的PERSON

查看全部评论