参考:《Professional Android 4 Application Development》
Android应用程序生命周期
Android应用程序无法控制自己的生命周期,因此它必须在自己的生命周期状态发生变化时作出相应的反应。
Android应用程序的优先级和它进程的状态
进程的重要性取决于它host的应用程序,应用程序的优先级等于程序中优先级最高的组成部分。(The order in which processes are killed to reclaim resources is determined by the priority of their hosted applications. An application’s priority is equal to that of its highest-priority component.)
如果两个应用程序的优先级一样,运行时间最长的程序会先被杀掉。进程的优先级同时还决定于相互依赖关系,如果程序A依赖于程序B中的Service或Content Provider,那么程序B的优先级不会低于程序A。
从上面的Android Process优先级树可以看出,分清程序的状态和优先级,并对其作出适当的处理,是很重要的。
-
Active Process:Active(foreground) process会直接响应用户的操作,具有最高的优先级,包括下面几种:
-
处于active state的Activities
-
正在执行onReceive方法的Broadcast Receivers
-
正在执行onStart, onCreate或onDestroy方法的Service
-
标记为前台运行(foreground)的Service
-
-
Visible Process:顾名思义,这是指可以看见(visible),但不在前台(foreground)运行的程序。当一个Activity部分被遮住时,它就成了Visible Process。例如程序运行时收到短信,有些短信会部分遮挡应用程序。
-
Started Service Process:顾名思义,包含运行状态Service的Process。
-
Background Process:Process中所host的Activity既不visible,又没有任何运行中的service,使用last-seen-first-killed模式进行管理。
-
Empty Process:在资源不紧张时,Android会将运行结束的程序放在内存中,从而可以更快地启动这些程序。这种已经死亡但仍在内存中的Process,就是Empty Process。
Android Application类简介
Application类具有这几个职责:
-
响应系统发出的Application级别的广播,例如low memory等。
-
在系统的不同组件之间传递对象。
-
管理多个组件共享的资源。
为了更好地第2,3条所要求的功能,Application类使用了单例模式。
重载Application类的生命周期事件方法
-
onCreate:重载此方法可以对Application的单例进行修改。
-
onlowMemory:重载此方法来清除缓存或释放其他资源。
-
onTrimMemory:往往发生在程序状态转为background时。
-
onConfigurationChanged:Application在配置文件发生变化时不会自动重启,所以可以在这个方法里响应配置修改事件。