前言
对于一个android开发者来说,context一定不会陌生。
通常情况下,我们再需要context的方法中,传入context参数即可。然而,以面向对象的思维来编程,这并不是一个很好的做法,将责任推卸给调用者,不但增加了调用者的负担,也让开发者对于方法的理解构成障碍。
接下来我们将介绍一种更好的实现方法,以便让你在项目的任何地方都能够轻松获取context。
Android提供了Application类,每当应用启动的时候,系统会自动将这个类进行初始化。我们可以定制一个自己的Application类,以便管理app中一些全局的状态信息,比如说全局的context.
定制自己的Application类
创建一个MyApplication类继承自Application,代码如下:
import android.app.Application;
import android.content.Context;
/**
* <p>
* 此类用来初始化应用中通用的信息
* </p>
*
* @author jiangbing
*
*/
public class MyApplication extends Application {
/** The global context */
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
// TODO
// Here, you can initialize some global infos ...
// 1.init context
mContext = getApplicationContext();
}
/**
* You can get the context anywhere.
*
* @return Context 全局context
*/
public static Context getContext() {
return mContext;
}
}
可以看到,MyApplication 中的代码非常简单。这里我们重写了父类的 onCreate()方法,并通过调用 getApplicationContext()方法得到了一个应用程序级别的 Context,然后又提供了一个静态的 getContext()方法,在这里将刚才获取到的 Context 进行返回。
接下来我们需要告知系统,当程序启动的时候应该初始化 MyApplication 类,而不是默认的 Application 类。这一步也很简单,在 AndroidManifest.xml 文件的标签下进行指定就可以了,代码如下所示:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test"
android:versionCode="1"
android:versionName="1.0" >
……
<application
android:name="com.example.test.MyApplication"
…… >
……
</application>
</manifest>
接下来,我们就可以在任何需要context调用即可:
MyApplication.getContext();