Android学习笔记之——Application
淫慢则不能励精,险躁则无以治性。临近毕业好久没写博客了,这次来探讨下Android开发中Application使用的理解。您宝贵的意见可以让我明白自己的不足之处,并加以改正,在此谢谢各位了!
博客将涉及以下几点:
- 什么是Application
- 如何使用Application
- Application的生命周期以及回调方法
- Application的作用
那么直接开始吧:
1、什么是Application
在文档中的定义是:
Application 类是用来维护应用程序全局状态。你可以提供自己的实现,并在 AndroidManifest.xml文件的 <application> 标签中指出他的名字,这将导致在创建应用程序时去实例化你自己的 Application 类。
Android系统会为每个程序运行时创建一个Application类的对象且仅创建一个,所以Application可以说是单例模式的一个类。且 Application 对象的生命周期是整个App中最长的,它的生命周期就等于这个App的生命周期。因为它是全局唯一的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以通过 Application 来进行一些:数据传递、数据共享、数据缓存等操作。
2、如何使用Application
使用Application很简单只需要两步即可:
1、创建子类并继承Application类
2、在AndroidManifest.xml文件中为<application> 标签中指出他的名字android:name
代码如下:
example子类:
public class ExampleApp extends Application {
}
AndroidManifest.xml文件:
<application
android:name=".exampleApp"
>
3、Application的生命周期以及回调方法
在本文的第一点中提过,Application是Android用来维护应用程序全局状态的,所以它的生命周期是整个App中最长的,并且Application有几个重要的回调方法onCreat()、onConfigurationChanged()、onLowMemory()(在Android 4.0后onTrimMemory()所代替),现在我将一一的进行探讨:
首先我们来观察下Application的生命周期,这里我新建了个Activity
public class MainActivity extends AppCompatActivity {
private static final String TAG = "zbyMainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//打印出Application和Activity的HashCode
Log.d(TAG, "Application: "+getApplication()+"Activity"+this);
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
}
同时在exampleApp的onCreate中也打印出HashCode
public class ExampleApp extends Application {
private static final String TAG = "zbyExampleApp";
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "Application: "+this);
}
来看下运行结果
单击返回键结束Activity后从新打开App后:
我们发现Activity的HashCode已经变化,而Application的任然是同一个,这说明了Activity的生命周期结束了。Application的生命周期还在继续。
了解了生命周期我们再来看看Application的一些常见回调方法
需要先说明一点:Application的回调方法全部运行在UI线程中(主线程),请不要在这里处理耗时操作。
onCreate我们已经非常熟悉了,就不再赘述。来谈一谈我们陌生的onConfigurationChange和替代了onLowMemory的onTrimMemory。
1、onConfigurationChange
onConfigurationChange会在系统配置发生变更的时候调用,比如更改了屏幕方向或者修改了系统语言等,就会调用这个方法。
2、onTrimMemory
Android4.0之前只能用onLowMemory方法,而从4.0开始,onTrimMemory就替代了onLowMemory方法。
它们的作用是,检测到手机内存不足,为了防止App被杀掉,可以通过该方法来释放一些资源降低内存。
1、该方法中有个参数level,有几个对应的枚举值:
TRIM_MEMORY_RUNNING_MODERATE:程序处于前台正常运行,不会被杀掉,但内存有点低,系统开始kill后台的其他进程。
TRIM_MEMORY_RUNNING_LOW :程序处于前台正常运行,但当前内存非常低,请释放不必要的资源,不然会影响App响应速度。
TRIM_MEMORY_RUNNING_CRITICAL:程序处于前台正常运行,大部分后台进程已经被杀死,请释放不必要的资源
TRIM_MEMORY_UI_HIDDEN:应用从前台切换到后台,回收ui资源
TRIM_MEMORY_BACKGROUND:应用在后台运行,处于LRU缓存列表的最近位置,被回收的优先级比较低,可以释放一些资源,让应用在后台存活更长时间。
TRIM_MEMORY_MODERATE:应用在后台运行,处于LRU缓存列表的中间位置,如果资源得不到释放,有被系统回收的可能。
TRIM_MEMORY_COMPLETE:应用处于后台,处于LRU列表的边缘位置,系统内存严重不足,随时可能被回收,此时尽可能释放掉一切可释放的资源。
上面7个枚举从上到下,越来越容易被系统杀死,回收资源。
4、Application的作用
通过上面对生命周期的分析Application的作用显而易见:
1、初始化资源
App启动时会在Application的onCreate()方法中初始化一些全局资源,系统配置,第三方sdk等。
2、数据共享
由于Application对象是全局唯一的,所以可以用来缓存一些全局变量,这些变量在任何地方都可以调用,达到共享目的。
3、监听App所处状态
通过onConfigurationChange回调方法可以知道当前App处于什么状态
这次所记录的内容就到此为止了,本文写的内容都为基础知识毕竟是笔记篇,很早前就想写些自己对一些内容更深方面的理解并汇总于提高篇的,但这一年发生了好多事情一直没法实现,从上一次写作到这一次间隔了很多时间,希望之后还是能经常来写写博客吧。感谢您的观看,有缘下次再见!