Android被设计用于开发独特要求的移动应用程序。尤其,Android认为大多数移动设备上的资源(例如:内存和电池)是有限的,并提供了一些机制以保持这些资源。这些机制也体现在Android Activity生命周期中,生命周期描绘了一个Activity从创建到完成运行的过程中的状态或事件。这个生命周期也可以概略的用下图来描述:
图:Android Activity生命周期
通过对Activity类的事件方法重载以及实例化方法,你的Activity将监视并且相应下面这些事件:
onCreate
当你的Activity被第一次创建时调用。在这个地方你将创建你的视图,打卡你的Activity需要使用的任何持久数据文件,并且初始化你的Activity。当调用onCreate时,Android框架将同时传递一个以前运行该Activity存储的状态Bundle对象。
onStart
在你的Activity显示到屏幕之前调用。一旦onStart运行完毕,如果你的Activity能够成为显示于屏幕的前端Activity,控制将会传递到onResume。如果这个Activity不能成为运行于屏幕的前端Activity,控制将传递到onStop方法。
onResume
当你的Activity成为屏幕前端Activity后onResume将被立刻调用。在这个时间点你的Activity处于运行状态并且能与用户进行交互。你可以接受键盘和触摸输入,并在屏幕上显示你的用户界面。当你的Activity失去屏幕前端焦点时onResume也会被调用,并且这个Activity最终退出,而另一Activity将被弹到前端。这也是你的Activity将开始(或恢复)的地方,并且可以做一些需要的事情比如更新用户界面(例如:接收位置更新或者运行一个动画)。
onPause
当Android试图恢复一个不同的后端Activity到前端时调用。在这个时候你的Activity将不能在访问屏幕,所以你应该做一些节约电池和CPU周期的事情。如果你在运行一个动画,那么将不会有人再看到它,所以你应该暂停它的运行知道它再次被切换到屏幕前端。你的Activity需要利用这个方法去保存再次恢复它到前端的需要的任何状态——当然不需要担保你的Activity一定将被恢复。如果你的移动设备运行出现内存溢出,并且没有磁盘上也没有可用的虚拟内存扩展,那么你的Activity可能必须为需要内存的系统进程让路。一旦你退出此方法,Android可能在任何时候杀掉你的Activity而不会返回任何控制。
onStop
当你的Activity不再可见时调用,或者当另一个Activity被拿到前端或者你的Activity被销毁时也会调用此方法。
onDestroy
在你的Activity被销毁之前你还有一次机会可以做任何操作。通常你到达这个时间点是因为Activity已经完成框架也会调用它的完成方法。但是如先前所说,调用这方法还因为Android需要回收你的Activity消费的资源。
利用这些方法尽可能提供最好的用户体验是重要的。这也是本书讨论移动变成与桌面编程之间有何不同的第一个地方,在后面的章节中还会有许多类似的地方。如果你在编写众多Activity时考虑到Activity生命周期,你的用户将会满意而且你也将最终受益。