Android Application类实例是否始终存在?有无创建例外情况?
关于Android Application实例的两个问题解答
1. Application实例是否始终存在?
简单说:只要你的应用进程还存活,Application的实例就会一直存在——它是整个应用进程的核心单例对象,生命周期和进程完全绑定。
当系统因为内存不足、后台清理等原因杀死你的应用进程时,Application实例会被回收销毁;下次用户(或系统)触发应用组件启动时,会重新创建进程,同时重新实例化Application对象。
2. 进程创建时Application是否会在其他类之前实例化?有没有例外?
官方文档的描述是准确的,没有例外——不管是通过Launcher启动Activity、触发静态广播、启动Service还是访问ContentProvider,只要系统需要创建你的应用进程,Application类(或你自定义的子类)都会在所有其他组件类实例化之前完成对象创建。
这里需要澄清一个容易混淆的细节:生命周期方法的调用顺序。比如ContentProvider的onCreate()会在Application的onCreate()之前执行,但这并不违背“先实例化Application”的规则——因为此时Application对象已经被创建完成(已经调用了attachBaseContext()),只是还没执行它的onCreate()方法而已。
举个实际场景:如果你的应用处于未运行状态,此时收到了一个你注册的静态广播,系统会先启动你的应用进程,完成Application的实例化,然后才会创建广播接收器实例并调用onReceive()方法。你完全可以在广播接收器的代码中通过getApplication()获取到Application实例,这也能直接证明它已经存在了。
内容的提问来源于stack exchange,提问作者clearpath
相关产品推荐
相关产品推荐

