欢迎来到天天文库
浏览记录
ID:34418529
大小:34.11 KB
页数:6页
时间:2019-03-06
《service的生命周期与activity生命周期区别》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Service的生命周期与Activity生命周期区别http://my.oschina.net/xiahuawuyu/blog/687090人收藏此文章, 我要收藏发表于3个月前(2012-07-2411:54),已有196次阅读共0个评论 碰到一面试题 简述activity/service生命周期?组件的生命周期 应用程序组件都有一个生命周期,从响应Intent的Android实例开始到这个实例被销毁。在这期间,他们或许有效或许无效,有效时或许对用户可见或许不可见。下面我们就来讨论四个基本组件的生命周期,包括在生命周期内的各种状态,以及状态
2、之间的转换。这几种状态可能的结果是:进程让他们停止,然后实例被销毁。 一、activity生命周期 一个activity有三个基本的状态: @当activity在前台运行时(在activity当前任务的堆栈顶),为活动或者运行状态。这时activity会响应用户的操作。 @当activity失去焦点但是对用户仍然可见时为paused暂停状态。此时,别的activity在他的上面,透明或者备有被全部覆盖。所以其中一些暂停的activity也可以被显示。一个暂停的activity是处于活动状态的(他维护着所有的状态保存着信息,并且依然附着
3、在窗口管理器)。 @如果一个activity完全被另一个activity所掩盖那他会处于stop状态。但仍然保存着原来的状态和信息。然而,如果别的地方需要更多的内存而且这个activity仍一直处于隐藏状态,那么系统有可能会杀死他的进程。 如果一个activity是暂停或者停止状态,系统可以清理他们占用的内存,或者调用finish()方法,或者直接结束他的进程。当他再次显示给用户时,会完全的重新运行并且加载以前所存储的信息。 activity状态之间的转换,是通过以前的受保护方法完成的: voidonCreate(BundlesavedI
4、nstanceState) voidonStart() voidonRestart() voidonResume() voidonPause() voidonStop() voidonDestroy() 这些都是钩子函数,你可以重写他们,当状态改变时做一些适当的处理。所有的activity在首次运行时必须实现onCreate()方法来初始化安装。activity可以实现onPause()来提交数据改变,然后准备停止与用户的交互。 调用超类 每一个实现的activity生命周期方法都会先调用一下父类的方法,例如: viewpla
5、incopytoclipboardprint? protectedvoidonPause(){ super.onPause(); ... } protectedvoidonPause(){ super.onPause(); ... } 通过这两者比较?,这7个方法定义了一个activity的整个生命周期的方法。你可以实现并且监测这三个嵌套循环: @整个生命周期 调用onCreate()方法和onDestroy()之间称为一个activity的完整的生命周期。activity会在onCrea
6、te()里执行所有的初始化安装,在onDestroy()方法里释放所有的剩余资源。例如:一个从网络下载程序的线程,就需要在onCreate()方法里创建,在onDestroy()方法里销毁。 @可见生命周期 可见生命周期是从onStart()方法到onStop()方法的时间。这段时间,用户会在屏幕上看到这个activity。尽管他可能不是在最顶层显示,也没有和用户进行任何交互。这两个方法之间,你可以保持需要向用户显示的资源。例如:你可以在onStart()方法时注册一个BroadcastReceiver检测某些变化来改变你的界面,当用户看不到
7、这个activity的界面时可以在onStop()里注销这个BroadcastReceiver。这两个方法可以被调用很多次,在可见和对用户隐藏时,作为候补的activity待命。 @前台显示周期 一个activity从onResume()方法指导一个onPause()方法称为前台显示周期。此时他在其他的activity之上显示并且与用户交互。一个activity可以频繁的在这两个方法之间过度,例如:当设备休眠或者另一个新的activity启动时,它会进入onPause()状态,当一个activity运行结束或者新的接收到Intent请求时,a
8、ctivity的onResume()会被调用。因此,这两个方法里的代码量会很少。 下图说明了上面说的几个循环,里面的箭头说明了两个状态
此文档下载收益归作者所有