activity经常呈现给用户全屏的WINDOW,但是也能作为一个浮动窗口 (via a theme with windowIsFloating set)
或者内嵌在另一个 ActivityGroup 中
entire lifetime 发生在ONCREATE和ONDESTROY之间
它将做所有的setup of "global" state在CREATE中,释放所有资源在ONDESTROY中
visible lifetime 在ONSTART和ONSTOP之间
在此期间用户能看到他在屏幕上,尽管他可能不在foreground and interacting with the user
在这期间你能维护需要SHOW给用户的资源。
例如你能注册一个 BroadcastReceiver in onStart区件事那些影响UI的变化
卸载它在ONSTOP,当用户不能再看到石。
foreground lifetime 在ONRESUME,ONPAUSE之间。
轻量级代码在此。
处在PAUSE,STOP,DESTROY的ACT是能被KILLED,因此你应该用ONPAUSE去写持久化数据
另外onSaveInstanceState(Bundle) 被调用在放置ACT到背景状态之前,允许你去保存一些动态实例状态
将被接收到在ONCREATE。
注意如果要保存持久化数据应该在ONPAUSE中而不是ONSAVE..中,因为后者不处于生命周期回调函数。
当配置改变时,ACT将被摧毁( onPause(),onStop(),and onDestroy( ))将被重新创建
(当然在onSaveInstanceState(Bundle) 保存的将被重新拿到)
设置android:configChanges 也能绕过上述流程
如果在这个属性没被提到的配置改变了,ACT将被重启而 onConfigurationChanged(Configuration 不将被调用。
保存持久化数据一般有俩中方法sqlite database using a content provider and internal state such as user preferences
能立即持久就立即持久,这样当去另一个ACT时,那个ACT就能利用到
或者当ONPAUSE被调用时,这确保那些变化将被即将启动的ACT所能看见。
use preferences去共享在多个APP部件(ACT,SER,RECEIVER,PROVIDE)间的
Process Lifecycle
foreground activity ,他的进程将被最后杀
visible activity visible to the user but not in the foreground
background activity 如果这个进程被杀,那么当从上面的ACT,user navigates back to它时,
他的ONCREATE将被调用带着在 onSaveInstanceState 保存的一些数据,以便他能RESTART
empty process 这样的进程属于比如说没有任何ACT,SERVCE,BROADCASRRECEIVER类
因为这个原因,所以对已那些比较重要的背景进程(不再ACT中的)must be executed in the context of an activity BroadcastReceiver or Service to ensure that the system knows it needs to keep your process around.
如果一个ACT需要做些耗时的操作并且独立于ACT生命周期的,你应该把他放在SERVICE中
(他将作为比其他非可视化APP更重要的进程)