Android Context解析
郭神:Android Context完全解析,你所不知道的Context的各种细节
鸿洋:Android Context 上下文 你必须知道的一切
1.Context类型
android.content.Context
ContextWrapper是上下文功能的封装类。
ContextImpl则是上下文功能的实现类。
ContextThemeWrapper是一个带主题的封装类。
2.Context数量
Context数量 = Activity数量 + Service数量 + 1
3.Context使用
数字1:启动Activity在这些类中是可以的,但是需要创建一个新的task。一般情况不推荐。
数字2:在这些类中去layout inflate是合法的,但是会使用系统默认的主题样式,如果你自定义了某些样式可能不会被使用。
数字3:在receiver为null时允许,在4.2或以上的版本中,用于获取黏性广播的当前值。(可以无视)
注:ContentProvider、BroadcastReceiver之所以在上述表格中,是因为在其内部方法中都有一个context用于使用。
4.获取Application Context
getApplication():语义性非常强,一看就知道是用来获取Application实例的,但是这个方法只有在Activity和Service中才能调用的到。
getApplicationContext():getApplicationContext()方法的作用域会更广一些,任何一个Context的实例,只要调用getApplicationContext()方法都可以拿到我们的Application对象。
getBaseContext():得到的是一个ContextImpl对象,是Context功能的实现类。
5.自定义Application
Application全局只有一个,它本身就已经是单例了,无需再用单例模式去为它做多重实例保护。
public class MyApplication extends Application {
private static MyApplication app;
public static MyApplication getInstance() {
return app;
}
@Override
public void onCreate() {
super.onCreate();
app = this;
}
}