设为首页 加入收藏

TOP

Android Activity生命周期管理(二)
2014-11-24 11:33:29 来源: 作者: 【 】 浏览:2
Tags:Android Activity 生命 周期 管理
形其实是另外又启动了一个Activity的实例,并通过onCreate()的参数传递进先前杀掉的Activtiy里保留的信息。


onStart()可因为已经STOPPED了,再次执行而被调用多次。


onResume()可因为Activity的PAUSED/RESUMED的不停转换,而被频繁调用。



Activity的暂停与继续


Activity因为被别的Activity遮住部分UI,并失去焦点而被打断暂停,典型的情况发生在系统进入睡眠或被一个对话框打断的情况。而在被暂停之前,系统会通过onPause()让Activity有保留被暂停前状态的时机。Activity可以在onPause()中,保存所做的修改到永久存储区,停止动画显示,等。onPause()里的操作必须简短并快速返回,因为在onPause()返回之前不会调入其他的Activity运行。


此时Activity因为还有部分UI显示,它通常与Window Manager的链接还在,所以一般UI的修改不需保留。即便在极端的情况下,PAUSED的Activity所在的进程被杀死,那也是极端情况,那种情况下,不可能使Activity的UI显示完整一致。


系统在被唤醒或者打断它的对话框消失之后,会继续运行,此时系统会调用Activity的onResume()方法。在onResume()方法中可以做与onPause()中相对应的事情。


下图是,一个Activity启动同一个进程内另外一个Activity的时序图。它能很好的说明,一个Activity启动时,与另外一个Activity之间的各种PAUSE/RESUME交互过程。




不过千万记得,PAUSE/RESUME是众多Activity状态转换中的一个子集,很多其他的场景也是要走这个过程的。



Activity的关闭/销毁与重新运行


Activity被STOP可能是完全被别的Activity覆盖掉了,也可能是用户显式的按了BACK或HOME键。Activity被Stop之前,它的onStop()方法会被提前调用,来做些Stop前的处理。如果处于STOPPED的Activity再次运行,它的onRestart()方法会被调用,这是区分其他调用场景,比较合适的实现处理的地方。


注意,因为处于PAUSED状态的Activity在内存极端不足的情况下,它所在的进程也可能被杀掉,这样onStop()在被杀掉前,不一定会被调用,所以onPause()是比onStop()更合适的保留信息到永久存储区的时机。


Activity被销毁可能是显式的按了BACK键,也可能是处于PAUSED或STOPPED状态,因为内存不足而被杀掉的。还有种情况是配置信息改变(比如屏的方向改变)之后,根据设置需要杀掉所有的Activity(是否关闭还要看Activity自己的配置),再重新运行他们。


被系统隐式杀死的Activity,在被杀死(onStop()调用)之前,一般的会调用onSaveInstanceState()保留该Activity此时的状态信息。该方法中传入Bundle参数,可在此方法中把此时的状态信息写入,系统保留这这些系统。而当该Activty再次被实例化运行时,系统会把保留在Bundler的信息再次以参数形式,通过onCreate()方法传入。


一般,onSaveInstanceState()中保留UI的信息,永久存储的信息最好还是在onPause()中保存。Activity的onSaveInstanceState()已经缺省实现来保留通用View的UI信息,所以不管你保留与否当前Activity的信息,通常都要在onSaveInstanceState()先调用一下super.onSaveInstanceState()保留通用的UI信息。



参考资料及进一步阅读


[1] DeveloperGuide Framework Topics – Activities http://developer.android.com/guide/topics/fundamentals/activities.html


[2] ActivityReference http://developer.android.com/reference/android/app/Activity.html


[3] Activitysources Activity.java


[4] Intentand Intent filters http://developer.android.com/guide/topics/intents/intents-filters.html


[5] Processesand Threads http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇搭建Windows下Android应用开发环.. 下一篇解读Android LOG机制的实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)
·MySQL 数据类型:从 (2025-12-26 18:20:03)
·Linux Shell脚本教程 (2025-12-26 17:51:10)
·Qt教程,Qt5编程入门 (2025-12-26 17:51:07)