安卓APP在某些情况下,Activity发生异常,进程崩溃后,系统会自动恢复一个新的进程,重新创建Application,然后恢复任务栈中的上个Activity
现通过以下情景来举例说明: Application => 启动SplashActivity => 启动A => 启动B => 启动C
现在我们在C的onCreate中加入代码,让其崩溃,然后观察系统行为 我们看到,C发生异常后,进程崩溃了,但是系统重新恢复了一个进程,并回到了B
当然,并不是任意时候,进程都会自动恢复,需要注意以下几点
只有在Handler和EventListener中启动的Activity,会在发生异常时重新恢复进程
如果在onCreate中直接启动其它Activity报错,进程将直接崩溃
进程恢复后,会重建Application,然后恢复任务栈中最近的一个Activity,引发异常的Activity不会被恢复
任务栈中的其它Activity不会被立刻恢复,直到按下返回键,返回到某个Activity时,才会被恢复
Activity在恢复时,会保留Intent中的值,所有生命周期方法会重新执行一遍,但是静态变量等可能会丢失 由于进程在恢复时,只重建了Application和最近的Activity,并且保留了Activity中的Intent,我们根据这个流程,就可以推断出哪些值可能丢失了,哪些值仍然和崩溃前是一样的