Application是什么

经常在AndroidManifest.xml中看到application标签,却不知道这是个什么意思,让我表示很蛋疼,于是今天就开始来一探到底了~~

通过其继承关系我们可以发现Application是继承自ContextWrapper,ContextWrapper呢仅仅是对Context的一个包装而已。
这里写图片描述
Application又有两个子类MockApplication和MultiDexApplication

其中MultiDexApplication是在遇到了”65535”问题的时候,可以选择继承自他,完成多Dex打包配置的相关工作。另外一个是在TDD(测试用例驱动)开发模式中使用Moke进行测试的时候用到的,可以来代替Application的Moke类MockApplication。

那么Application到底是什么呢?他和Activity一样是Android非常重要的组件,主要用于存储一些系统信息,从他继承与Context我们就能看出来。

在Android系统启动的时候,系统就会创建一个Application,注意Application在一个Dalvik虚拟机里面只会存在一个实例。而一个app不会只有一个Dalvik虚拟机。在多进程模式下,一个app可能会有多个Dalvik虚拟机,从而,就有多少个Application,并且他们之间没有任何的联系。进程A的Application不可以在进程B的Application中获取数据,毕竟他们不是一个对象。

另外,Application本身就是单例模式的一个类。

启动Application时,系统会创建一个PID,即进程ID,所有的Activity都会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。

Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局的单例的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以可以通过Application来进行一些,如:数据传递、数据共享和数据缓存等操作。

一般我们都会在Application.onCreate()里面完成一系列的初始化工作。但是不要在Application里面做太多耗时的操作,这会影响App的启动速度,所以对于不必要的操作可以使用异步操作、懒加载、延时加载等策略来减少对UI线程的影响。

要注意的是,在内存较少的情况下,Application有可能会销毁,从而导致保存在Application里面的数据信息丢失,最后程序错乱,甚至是Crash。所以当你想在Application保存数据的时候,请做好为空判断,或者是选择其他方式保存你的数据信息。

  • 不要在Android的Application对象中缓存数据!

你可能感兴趣的:(Application是什么)