官方文档这样描述Context:
/**
* Interface to global information about an application environment. This is
* an abstract class whose implementation is provided by
* the Android system. It
* allows access to application-specific resources and classes, as well as
* up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.
*/
可以得知Context主要有以下含义:1.描述应用程序环境的信息;2.它是一个抽象类;3.可通过其获取应用的资源和类,也包括一些应用级别操作,例如:启动一个Activity,发送广播,接受Intent信息等。
Activity Service Application都继承Context,都是其实现类。所以应用程序在创建Application 创建Activity 以及创建Service时会创建应用的上下文context实例。
1.创建Application对象时
应用程序第一次启动时会创建一个Application对象同时创建Application Context,其生命周期贯穿整个应用进程的生命周期。创建Application的时机在创建handleBindApplication()方法中
2.创建Activity对象时
在调用startActivity()和startActivityForResult()方法去请求启动一个Activity时,如果系统检测需要创建一个新的Activity对象时会调用handleLaunchActivity()方法,该方法继而调performLaunchActivity()方法,去创建一个Activity实例,并且回调onCreate(),onStart()方法等。在Activity中获取Context对象时可直接用this,再起内部类中则需要指定xxActivity.this来获取。其生命周期跟Activity的生命周期同步。
3.创建Service对象时
通过startService或者bindService时,如果系统检测到需要新创建一个Service实例,就会回调handleCreateService()方法。
注意:通过getApplicationContext()方法来获取的context与xxActivity.this获取的有着本质区别。一个整个应用的上下文,一个时组件的上下文。那么各自的使用场景肯定也不同,乱使用可能会带来一些问题,如内存泄漏等。
在使用Context时注意以下几点:
1.与UI相关的操作尽量不要使用ApplicationContext对象。
2.长期保持持有Context对象的工具类或者静态方法避免内存溢出尽量使用ApplicationContext对象。