Android Activity生命周期
最近做的东西中,需要加入播放音乐的功能。只有Activity在Running状态下才能播放,按Home键或者返回键,音乐要暂停,当回到应用中,
音乐要继续播放。所以,这就需要熟悉Activity的生命周期,在合适的状态下Override其状态方法,才能达到效果。在网上一番查询,将自己的
理解与笔记 记录如下。(这不是纯原创,大多知识来源于网络,只是用我自己的话写下来而已,为了加深印象)。
一、activity的所有状态过程
onCreate (-->onRestart)-->onStart (-->onRestoreInstanceState) -->onResume -->onSave -->onPause -->onStop (-->onSaveInstanceState)-->onDestory
从onResume开始到onStop 这段期间,activity都是可见的。
但是 这个流程并不是都走完,而是可能从某一部分开始(除了第一次启动),到某一部分结束。下面就说一下,各种情况的执行流程。
1、进入activity(第一次启动)
onCreate -->onStart -->onResume
2、按返回键后
onPause -->onStop -->onDestory
3、按Home键后
Home键退出:onPause -->onStop (-->onSaveInstanceState)
Home键回来:onRestart -->onStart -->onResume
4、休眠/恢复
休眠:onPause
恢复:onResume
5、旋转屏幕
未设置android:configchanges
onPause -->onStop -->onDestory -->onCreate -->onStart
设置android:configchanges:"orientation|keyboardHidden";
不会触发生命周期方法
6、来电话
来电,显示来电界面
onPause -->onStop
关闭来电界面
onRestart -->onStart -->onResume
7、进入另一个activity
onPause -->onStop (-->onSaveInstanceState)
8、从其他activity返回到当前activity
(-->onRestart) -->onStart (-->onRestoreInstanceState) -->onResume
二、关于onSaveInstanceState何时调用(摘自网络 根据谷歌文档翻译的 内容)
该方法为我们提供在某些情况下,保存Activity信息的机会,但是这个方法并不是什么时候都调用的。
该方法有一个参数类型 bundle 用来存储要保存的数据,之后会传给inCreate或者onRestoreInstanceState()
这个方法在一个activity被杀死前被调用,当该activity在将来某个时刻回来时可以恢复其先前的状态。就像 上面 的第7个 进入另一个activity
从A activity 进入到 B activity,如果在某个时刻系统因为回收资源的问题把A杀掉了,那么A就有机会调用该方法去保存当前信息,若没有把A杀掉
就不会调用该方法,但是从B回到A时,B永远不会调用该方法,因为永远不会返回到B。
三、验证
看完了东西就要验证一下
下面直接给出验证结果
只有一个activity的情况下,按Home键会执行onSaveInstanceState方法,按返回键不会执行。
按Home键后,再按应用图标进入应用,不会从 onCreate 中获取到 onSaveInstanceState 传来的值。因为 这时并没有执行onCreate方法,而是执行了
onRestart -->onStart -->onResume。
这样来讲onSaveInstanceState 方法并不是在 系统回收的时候才会调用,只要activity 执行onstop后就会执行它。也就是说 这个方法可以提供了一个参数可以携带
本文 有些内容摘自其他博客,但是都没有赋值粘贴,而是记载我的笔记本上又敲了一遍键盘。如果理解错误还请指正。
音乐要继续播放。所以,这就需要熟悉Activity的生命周期,在合适的状态下Override其状态方法,才能达到效果。在网上一番查询,将自己的
理解与笔记 记录如下。(这不是纯原创,大多知识来源于网络,只是用我自己的话写下来而已,为了加深印象)。
一、activity的所有状态过程
onCreate (-->onRestart)-->onStart (-->onRestoreInstanceState) -->onResume -->onSave -->onPause -->onStop (-->onSaveInstanceState)-->onDestory
从onResume开始到onStop 这段期间,activity都是可见的。
但是 这个流程并不是都走完,而是可能从某一部分开始(除了第一次启动),到某一部分结束。下面就说一下,各种情况的执行流程。
1、进入activity(第一次启动)
onCreate -->onStart -->onResume
2、按返回键后
onPause -->onStop -->onDestory
3、按Home键后
Home键退出:onPause -->onStop (-->onSaveInstanceState)
Home键回来:onRestart -->onStart -->onResume
4、休眠/恢复
休眠:onPause
恢复:onResume
5、旋转屏幕
未设置android:configchanges
onPause -->onStop -->onDestory -->onCreate -->onStart
设置android:configchanges:"orientation|keyboardHidden";
不会触发生命周期方法
6、来电话
来电,显示来电界面
onPause -->onStop
关闭来电界面
onRestart -->onStart -->onResume
7、进入另一个activity
onPause -->onStop (-->onSaveInstanceState)
8、从其他activity返回到当前activity
(-->onRestart) -->onStart (-->onRestoreInstanceState) -->onResume
二、关于onSaveInstanceState何时调用(摘自网络 根据谷歌文档翻译的 内容)
该方法为我们提供在某些情况下,保存Activity信息的机会,但是这个方法并不是什么时候都调用的。
该方法有一个参数类型 bundle 用来存储要保存的数据,之后会传给inCreate或者onRestoreInstanceState()
这个方法在一个activity被杀死前被调用,当该activity在将来某个时刻回来时可以恢复其先前的状态。就像 上面 的第7个 进入另一个activity
从A activity 进入到 B activity,如果在某个时刻系统因为回收资源的问题把A杀掉了,那么A就有机会调用该方法去保存当前信息,若没有把A杀掉
就不会调用该方法,但是从B回到A时,B永远不会调用该方法,因为永远不会返回到B。
三、验证
看完了东西就要验证一下
下面直接给出验证结果
只有一个activity的情况下,按Home键会执行onSaveInstanceState方法,按返回键不会执行。
按Home键后,再按应用图标进入应用,不会从 onCreate 中获取到 onSaveInstanceState 传来的值。因为 这时并没有执行onCreate方法,而是执行了
onRestart -->onStart -->onResume。
这样来讲onSaveInstanceState 方法并不是在 系统回收的时候才会调用,只要activity 执行onstop后就会执行它。也就是说 这个方法可以提供了一个参数可以携带
一些信息等到下次恢复的时候可以获取使用。也不知道这么理解对不对。
另外 快速加入override方法
在eclipse的代码编辑区空白处 右键--source--Override/ImplementMethods... --选择相应的你要覆盖的方法 --ok。注意不要删除生成的方法内的 super,否则会出错。因为super是引用父类的那个方法,你覆盖只写了你想附加的功能,但是这个方法的原来的功能就要调用父类的去做。(理解有误的话请指正)
本文 有些内容摘自其他博客,但是都没有赋值粘贴,而是记载我的笔记本上又敲了一遍键盘。如果理解错误还请指正。