当Activity运行时,它的活动状态是由Android以栈的形式管理的,当前活动的Activity位于栈顶。并且Activity可以类似QQ的隐身,下线,上线等等,这就是它的生命周期。
Activity的生命周期大致一共分为4种:
- 活动状态:位于前台,就是你能看的见
- 暂停状态:其他的Activity位于前台,该Activity依然可见,一般是部分可见,只是不能获得焦点。
- 停止状态:该Activity不可见,失去焦点。
- 销毁状态:该Activity结束。或者所在进程被结束的时候。
具体周期的总结,我感觉这篇文章总结的挺好,我就不重复制造轮子了 总结
看完了总结,感觉都记住了,其实什么也没记住,毕竟有点抽象。
下面我以一个示例说明一下怎么应用吧,我们在开发中遇到的状况基本就4种。
- 正常启动一个Activity onCreate() ---> onStart() ---> onResume()
- Activity部分可见,(包含Dialog的Activity,按poweroff锁屏等)onPause() ,再回到前台 onResume()
- Activity不可见,(自己主动跳转到其他Activity或者来个电话啥的 )onPause() --> onStop() 下一步 如果重新到前台 onRestart() --> onStart() --> onResume() ,如果销毁onDestory()
- 可见Activity直接finish 调用 onPause() --> onStop() --->onDestory()
结论,由于系统能直接杀死app进程(比如设置里的强行停止),不经过onStop或onDestory,有些文章说onPause()方法是我们最大程度上保证Activity在销毁之前能够执行到的方法,有人说是onStop()。但是我实验的是onStop(),
2.Activity的加载模式
- standard:标准模式(默认模式)
- singleTop:Task顶单例模式
- singleTask:Task内单例模式
- singleInstance:全局单例模式。
加载模式的配置:在AndroidManifest.xml文件中activity元素的android:launchMode属性:
standard:这种模式用启动Activity,Android总会为目标Activity创建新的实例,这种模式不会创建新的Task。
singleTop:与标准模式基本一样,不同的是,如果目标Activity在栈顶,则Android不会创建新的Activity实例。其他情况和标准模式一样。
singleTask:采用这种模式加载Activity时,每个Task里只允许有一个该Activity的实例,如果要启动的Activity不存在,则创建新的实例,放到栈顶;
如果要启动的Activity已经位于栈顶,则和singleTop一样,不创建新的实例,世界复用该Activity实例;如果要启动的Activity存在于Task内,但是没有在栈顶,则Android会把要启动的Activity实例以上的所有Activity都移出Task,知道目标Activity位于栈顶。
singleInstance:采用这种模式加载时,一个Activity只允许有一个Task,并且一个Task也只有一个Activity实例。
说了这么多,然而并没有太多的卵用,你会说具体到应用中我哪知道我该用哪种加载模式呢,这得看你的需求了,举个例子,你APP的首页,一般情况下是用singleTask加载模式,为什么呢,因为一般情况下,我在首页时,我希望其他的Activity都销毁掉,以免造成后退和其他的问题,当然后台服务除外。所以一般的Activity还是用默认的加载模式,因为我们用完自己主动就销毁掉了。
其他的应用场景大家可以留言交流。