一、生命周期
onCreate()
启动 Activity 时,首次创建 Activity 时回调,大多数初始化在该函数内。
onRestart()
当 当前 Activity 重新显示给用户(用户已导航回它)时,在
onStop()之后调用。之后是onStart(),然后是onResume()。
onStart()
首次启动 Activity 时在
onCreate()之后被回调,再次启动时在onRestart()之后被回调。此时 Activity 已经可见但还没出现到前台不能与用户交互,通常执行绘制视觉元素、运行动画等操作。
onResume()
在
onStart()之后被回调,此时 Activity 已经完全可见并且可以与用户交互。
onPause()
当用户返回或者跳转到下一个 Activity 时会回调此方法,表示正在停止当前 Activity,但此时 Activity 依然可见,通常紧接着会回调
onStop()。
onStop()
表示 Activity 即将停止。
onDestroy()
表示 Activity 被销毁。
值得注意的地方:
onStart和onResume咋看起来差不多,但有一些细微的差别,onStart表示 Activity 虽然此时已经可见但并没有完全显示到前台,onResume表示此时已经完全显示到前台了,并可以与用户交互了,onPause和onStop区别类似于此。
当 ActivityA 启动 ActivityB 时,他们的生命周期方法执行顺序如下:
A.onPause()-->B.onCreate()-->B.onStart()-->B.onResume()-->A.onStop()
1、普通情况下的Activity生命周期方法执行顺序:
启动一个 Activity:
onCreate()-->onStart()-->onResume()
在当前 Activity 中跳转到下一个页面时(或者被用户切换到后台时),当前的 Activity 会被暂停:
onPause()-->onStop()
然后再返回这个 Activity 时:
onRestart()-->onStart()-->onResume()
Activity 退出时:
onPause()-->onStop()-->onDestroy()
2、横竖屏切换时Activity生命周期方法执行顺序:
onPause()-->onSaveInstanceState()-->onStop()-->onDestroy()-->
onCreate()-->onStart()-->onRestoreInstanceState()-->onResume()
在横竖屏切换时 Activity 会先被销毁,然后再重新创建,在销毁时onPause()被调用之后会调用onSaveInstanceState(Bundle bundle),此时我们就有机会将一些需要恢复的信息写入onSaveInstanceState()的Bundle参数中。
在 Activity 被重建时,调用onStart()之后会调用onRestoreInstanceState(Bundle bundle),此时我们就可以在onRestoreInstanceState()用来恢复一些必要的信息,而它的参数就是我们在onSaveInstanceState()写入的参数。
3、系统内存不足导致低优先级的 Activity 被回收时的生命周期方法执行顺序
此种情况和第二种横竖屏切换时的情况查不多,也会执行onSaveInstanceState()和onRestoreInstanceState()。
二、四种启动模式
standard
默认的启动方式,Activity可以被多次实例化,即同一个栈中可以存在多个Activity实例。
如果用ApplicationContext去启动standard模式的 Activit y的时候会报错,这是因为此模式的 Activity 默认会进入启动它的 Activity所属的任务栈中,而非 Activity 类型的 Context 并有没有任务栈。
解决办法就是:在用ApplicationContext启动 Activity 时指定Intent.FLAG_ACTIVITY_NEW_TASK的Flag即可,这样在启动 Activity 时就会为它创建一个新栈。
singleTop
栈顶复用模式。以
singleTop模式启动的 Activity 如果已经有一个实例存在栈顶,那么再启动这个 Activity 时就会重用这个实例,并回调onNewIntent()方法。如果不在栈顶,则会创建新的实例,效果如standard一致。
singleTask
栈内复用模式。此模式只允许一个栈中只存在一个该 Activity 的实例,启动此模式的 Activity 时,如果栈中没有该 Activity 的实例,则会创建新的实例。如果栈中已经存在该实例了,系统会销毁在其之上的所有 Activity,最终让该 Activity 实例置于栈顶,并回调
onNewIntent()方法。
singleInstance
单实例模式。该模式的 Activity 只在一个独立的任务栈中开启,并且这个新的任务栈中有且只有这一个实例。当再次启动该 Activity 实例时,会重用已存在的任务和实例(并调用
onNewIntent())。而该 Activity 启动的其他 Activity 会自动运行与另一个任务栈中。
singleInstance和singleTask的区别:
singleInstance在同一个时刻,在系统中只会存在一个实例,而singleTask模式的 Activity 可以有多个实例,只要这些实例在不同的任务栈中即可。比如应用A启动了一个singleInstance的 Activity,而应用B也启动了这个 Activity,那么会重用已经启动的实例。
参考文献:
《Android开发艺术探索》
《Android开发进阶从小工到专家》
转载自作者:CodingBlock
出处:http://www.cnblogs.com/codingblock/
Android Activity生命周期详解与启动模式解析

本文详细介绍了Android中Activity的生命周期,包括onCreate、onStart、onResume、onPause、onStop和onDestroy等各个阶段的执行顺序。在不同场景下,如普通启动、横竖屏切换及系统内存不足时,Activity生命周期的变化也有所不同。此外,还讨论了四种启动模式:standard、singleTop、singleTask和singleInstance,解释了它们的特点和应用场景。对于启动模式,重点在于理解如何复用和管理Activity实例。最后,文章提供了处理横竖屏切换时数据保存与恢复的方法。
396

被折叠的 条评论
为什么被折叠?



