https://www.cnblogs.com/CVstyle/p/6391908.html
Application类
每次应用程序运行时,应用程序的Application类都保持实例化状态(都会持有该Application实例)。与Activity不同的是,配置改变并不会导致应用程序重启。在应用程序内部,通过扩展Application类,可以完成以下三项工作:
1. 对Android运行时(接收到)广播的应用程序级别事件(如低内存事件广播)作出相应;
2. 在应用程序组件之间传递对象(应用程序内部的多个Activity之间,或其他组件之间);
3. 管理和维护多个应用程序组件使用的资源;
当在Manifest中注册了Application实现以后,它会在创建应用个程序进程的时候得到实例化。Application的实现在本质上是单态的,并且应该作为单态进行实现,以便提供对其方法和成员变量的访问。
如何使用Application?如何自定义Applicaton类?
自定义的Application类需要使用单例模式被创建,并在Manifest文件中指定该自定义的类。
在Manifest文件中指定该自定义Application类:
1
扫描二维码关注公众号,回复:
4524045 查看本文章
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
< application android:name=".DemoApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > < activity android:name=".MainActivity" android:configChanges="orientation|screenSize|keyboard" android:label="@string/app_name" > < intent-filter > < action android:name="android.intent.action.MAIN" /> < category android:name="android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > </ application > |
此时,应用程序在启动时,Application的实现将会被实例化。
在使用时,创建Application实例,部分代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class DemoApplication extends Application { private static final String TAG = DemoApplication. class .getSimpleName(); // DemoApplication使用单例模式使用 private static volatile DemoApplication singletonInstance; public static DemoApplication getInstance() { return singletonInstance; } @Override public void onCreate() { super .onCreate(); LogUtil.d(TAG, "onCreate running..." ); singletonInstance = this ; } |
创建新的状态变量和全局变量,以便从应用个程序组件中进行访问:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/** * <功能描述> 获取全局的状态变量 * * @return void [返回类型说明] */ private void getGlobalStateValue() { } /** * <功能描述> 设置全局的状态变量 * * @return void [返回类型说明] */ private void setGlobalStateValue() { } |
以上方法用于维护应用程序状态或实现共享资源,但是一种松散耦合的设计。
Application类中的其他方法有什么作用?
Application类为应用程序的创建和终止、低可用内存和配置改变提供了事件处理程序。通过覆写方法实现,应用程序行为。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
@Override public void onCreate() { // 创建应用程序时调用,用于实例化应用程序单例,创建和实例化应用程序状态变量或共享资源 super .onCreate(); LogUtil.d(TAG, "onCreate running..." ); singletonInstance = this ; } @Override public void onConfigurationChanged(Configuration newConfig) { // 配置改变时,应用程序不会被终止和重启,而是回调方法 super .onConfigurationChanged(newConfig); LogUtil.d(TAG, "onConfigurationChanged running..." ); } @Override public void onLowMemory() { // 可用于清空缓存或者释放不必要的资源 super .onLowMemory(); } @Override public void onTrimMemory( int level) { // API 13被引入,Android系统认为需要减少应用程序内存开销时调用 super .onTrimMemory(level); } |
应用程序在启动时,会默认启动一个Activity,但这个Activity必须符合一定的规范:
1 2 3 4 |
<intent-filter> <action android:name= "android.intent.action.MAIN" /> <category android:name= "android.intent.category.LAUNCHER" /> </intent-filter> |
该Activity被应用程序启动器使用,必须包含一个监听MAIN动作和LAUNCHER分类的intent-filter。