Android应用(xxx extends Application)、Activity、Service都继承自Context基类,实现了Context中定义的很多接口,这些接口是在Android应用开发中会经常用到的。
创建一个应用,创建一个Activity,创建一个Service,都会创建一个Context。也就是说,每个Android应用会有不只一个的Context,一般会有很多。
Context也有生命周期,Context的生命周期正常情况下应该和对应的组件(Application、Activity...)相同。
问:有这么多的Context,用谁呢?
答:用Context有一些原则,根据对Context引用时间长短,选择不同生命周期的Context。Activity中一般用Activity的Context,Service中一般用Service的Context,而一般静态的(静态成员变量,静态缓存等)对Context的引用则选择生命周期长的Application Context。
注:有一个比较隐蔽的Context错误引用可能导致内存泄漏。
一个界面中有很多用户编辑的内容,在Activity.onDestroy()的时候需要保存。为了在保存的时候不造成用户界面阻塞,通常会新启一个Thread去完成保存操作,这个新Thread有一个对Activity Context的引用。这时,Activity.onDestroy()以后Context对象应销毁掉,但销毁的时候发现Context还有人引用,则停止对Context的销毁,导致内存泄漏。