Application类
Application是Android框架的一个系统组件,当Android程序启动的时候系统会创建一个Application对象来存储系统的信息
首先我们来看一下官方文档给出的关于Application的解释
Base class for maintaining global application state. You can provide your own implementation by creating a subclass and specifying the fully-qualified name of this subclass as the “android:name” attribute in your AndroidManifest.xml’s <application>tag. The Application class, or your subclass of the Application class, is instantiated before any other class when the process for your application/package is created.
上边这段话的大致意思就是说,Application类是为了保存一些全局变量信息而存在的基类,可以自己创建一个继承自Application的子类,并在AndroidManidest.xml中application标签中进行设置,Application类或者你自定义的子类Application将会在application或者package被建立的时候在其他类之前实例化
除此之外,官方文档紧跟着加了一段Note备注:
Note: There is normally no need to subclass Application. In most situations, static singletons can provide the same functionality in a more modular way. If your singleton needs a global context (for example to register broadcast receivers), include Context.getApplicationContext() as a Context argument when invoking your singleton’s getInstance() method.
这段话的意思也就是说,正常情况下来说,创建一个application子类并不是必须的,在很多情况下,单例模式在更多模块化的方式下能起到相同的效果,如果单例需要全局context,可以利用Context.getApplicationContext()拿到Context对象从而引用单例的getInstance()方法。
这里可以这么理解,
Application其实可以说成是单例模式的一个类,并且application对象的生命周期肯定是整个程序中最长的,因为它的生命周期就等于整个程序的生命周期。
因为application全局都是单例的,所以对于程序里所有的Activity、Service来说所获得的application对象都是同一个,因此可以通过Application可以进行一些比如数据传递、数据共享、数据缓存等操作。
Application类的实现
当我们自定义Application的时候,主要就是要重写onCreate()方法如果我们在onCreate()方法中初始化变量,就能使其成为全局变量,在程序各个地方都能使用
1.继承Application类,并重写onCreate()方法
public class MApplication extends Application{
@override
public void onCreate(){
}
}
2.配置自定义Application方法
//在AndroidManifest.xml中配置
<application
android:name="MApplication"
/>
3.在程序中使用自定义类
public class MainActivty extends Activity{
private MApplication ma;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_main);
ma = (MApplication)getApplication;
/**
然后可以调用ma中的方法对变量进行设置,设置成功以后,在其他Activity中通过MApplication对象获取到的相同变量也随之更改了
*/
....
}
}
Constructors
Public constructors |
---|
Application() |
这里官方并没有给出具体说明 |
Methods
Public Method(全部为void类型) | 说明 |
---|---|
onConfigurationChanged(Configuration newConfig) | 当你的程序正在运行的时候如果配置发生了改变,就会调用该方法 |
onCreate() | 当程序开始运行,activity、service或者receiver被创建之前调用 |
onLowMemory() | 程序运行内存比较低的时候,后台进程已经被杀死前台应用仍然内存不够的时候调用该方法,可以释放一些不必要的资源,当该方法return以后系统会自动执行GC机制 |
onTerminate() | 这个方法主要用于模拟运行环境,但是当从android设备直接杀死程序的时候是不会调用该方法的(这个我也不太明白怎么回事) |
onTrimMemory(int level) | 当操作系统认为当前情况下是很好的时机为进程清理并释放不必要的内存资源就会调用该方法 |
registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback) | 参数是:Application.ActivityLifecycleCallbacks callback |
registerComponentCallbacks(ComponentCallbacks callback) | 当使用该方法的时候必须确保也用了 unregisterComponentCallbacks(ComponentCallbacks),系统不会自动帮你remove的 |
registerOnProvideAssistDataListener(Application.OnProvideAssistDataListener callback) | 参数是:Application.OnProvideAssistDataListener callback |
unregisterActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback) | 参数是:Application.ActivityLifecycleCallbacks callback |
unregisterComponentCallbacks(ComponentCallbacks callback) | 移除ComponentCallbacks对象,优先级高于 registerComponentCallbacks(ComponentCallbacks). |
unregisterOnProvideAssistDataListener(Application.OnProvideAssistDataListener callback) | 参数是:Application.OnProvideAssistDataListener callback |
以上就是官方给出的方法,我尽量根据自己的理解翻译了出来,后面几个目前来说有点理解无能。。。。就先挖个坑好了,以后理解了会来补充的。。。
如有错误欢迎指正,有建议欢迎交流。