全局获取 Context
全局获取 Context
Android 开发中很多地方需要用到 Context,比如弹出 Toast、启动活动、发送广播、操作数据库……
由于很多操作都是在活动中进行的,而活动本身就是一个 Context 对象,所以获取 Context 并不是那么困难。
但是,当应用程序的架构逐渐开始复杂起来的时候,很多的逻辑代码都将脱离 Activity 类,由此在某些情况下,获取 Context 并非那么容易。
Android 提供了一个 Application 类,每当应用程序启动的时候,系统就会自动将这个类进行初始化。而我们可以定制一个自己的 Application 类,以便管理程序内一些全局的状态信息,比如说全局 Context。
解决办法:
创建一个MyApplication类继承Applicationle类
public class MyApplication extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context =getApplicationContext();
}
public static Context getContext() {
return context;
}
}
这里我们重写了父类的 onCreate( )方法,并通过调用 getApplicationContext( )方法得到了一个应用程序级别的 Context,然后又提供了一个静态的 getContext( )方法,在这里将刚才获取到的 Context 进行返回。
接下来需要告知系统,当程序启动的时候应该初始化 MyApplication 类,在 AndroidManifest 文件的标签下进行指定就可以了。
<application
android:name=".MyApplication"
这样就已经实现了一种全局获取 Context 的机制,之后不管你想在项目的任何地方使用 Context,只需要调用一下 MyApplication.getContext( )就可以了。
Toast.makeText(MyApplication.getContext(),"全局Context获取成功",Toast.LENGTH_SHORT).show();
参考
1、如何在Adapter中优雅的使用Context
2、Carson带你学Android:如何理解 Context对于Activity的意义?