在我们平常的开发中,很多时候我们新建的一个普通的java类文件(非Activity类的),在某些地方我们需要用到Context,弹出Toast的时候要、启动活动的时候要、发送广播的时候要、操作数据库和弹出通知的时候等。
由于活动本身就是一个Context对象,在Activity活动里面获得Context很简单,但是当很多逻辑代码他不是Activity的时候,那怎么能获取到Context呢?当然你可以在要调用的方法里面添加一个Context context 参数,但是还有一种更好的方法可以解决。
Android提供了一个Application类,每当程序启动的时候,系统会自动将这个类进行初始化,因此我们常可以看到某个程序引用第三方sdk需要初始化配置时,一般都会自定义一个Application类。而我们可以定制一个自己的Application类,以便与管理程序内一些全局的状态。
定义一个自己的Application并不复杂,首先建立一个MyApplication类继承于Application
代码如下:
public class MyApplication extends Application {
private static Context context;
@Override
public void onCreate() {
context = getApplicationContext();
}
public static Context getContext() {
return context;
}
}
可以看到,MyApplication中的代码非常简单。这里我们重写了父类的onCreate()方法,并通过调用getApplicationContext()方法得到了一个应用程序级别的Context,然后又提供了一个静态的getContext()方法,在这里将刚才获取到的Context进行返回。
接下来我们需要告知系统,当程序启动的时候应该初始化MyApplication类,而不是默认的Application类。这一步也很简单,在AndroidManifest.xml文件的<application>标签下进行指定就可以了,代码如下所示:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.networktest"
android:versionCode="1"
android:versionName="1.0" >
……
<application
android:name="com.example.contexttest.MyApplication"
…… >
……
</application>
</manifest>
注意:指定Application时一定要加上完整的包名。
这样我们就已经实现了一种全局获取Context的机制,之后不管你想在项目的任何地方使用Context,只需要调用一下MyApplication.getContext()就可以了。
如果大家对此文有什么疑问,欢迎指出交流,谢谢!
在非Activity类中,Android开发时常需要Context。通过创建自定义Application类并重写onCreate(),可以获取全局Context。在MyApplication中,保存ApplicationContext并提供静态getContext()方法供项目各处使用,只需在AndroidManifest.xml中指定MyApplication为应用初始化类。
441

被折叠的 条评论
为什么被折叠?



