Android应用程序的生命周期:
与大部分传统的应用程序平台不同,Android 程序不能控制他们的生命周期,相反,应用程序组件必须监听应用程序状态的变化并作出适当的反应;而且特别要注意随时被终止做好准备。
默认情况下,每个Android 应用程序都是通过它们自己的进程运行的。每一个进程都运行在独立的Dalvik实例中。每一个应用程序的内存和进程管理都应该由运行时来管理。
通过在Manifest中对每一个受到影响的程序组件节点使用android:process属性,可以使同一个应用程序的组件运行在不同的进程中,或者让多个程序共享同一个进程。
Android 主动挂历它的资源,它会采取任何措施来保证稳定流畅的用户体验。这就意味着在必要的时候,进程以及它们的应用程序有时候会在没有警告的情况下被终止,这样就可以为高优先级的程序释放资源。
应用程序的优先级和进程状态:
回收资源的时候,进程被终止的顺序是由他们的优先级决定的。一个应用程序的优先级等同于他的优先级最高的组件的优先级。
当两个应用程序有相同的优先级时,在较低优先级状态运行时间最长的进程将会首先被禁止。进程的优先级也收到进程间依赖性的影响。如果一个应用程序依赖第二个应用程序所提供的Service或者Content Provider ,那么第二个应用程序至少拥有与它所支持的这个应用程序相同的优先级。
下图为程序各个状态的优先级:
l Active进程:指那些有组件正在和用户进行交互的应用程序的进程。Android 尝试通过回收其它应用程序的资源来使其报纸响应的进程。这样的进程很少,只有到最后关头才会终止这些进程。
Active的进程包括:
1.处在活动状态的Activity,他们处于前台并对用户事件进行响应。
2.正在执行onReceive事件处理程序的Boradcast Receiver
3.正在执行 onStart onCreate 或者onDestroy 时间处理程序的Service
4.正在运行、且已被标记为前台运行的Service
l 可见进程:可见但是非活动的进程是指那些驻留“可见Activity”;可见的Activity能被用户看到,但是并不处于前台运行或者能对用户事件作出反应。比如Activity被部分挡住,或者被一个透明的Activity挡住时。这些进程数量也不是太多,只有在资源极度匮乏的环境下为保证Activity进程继续执行才会终止这些进程。
l 启动Service进程:已经启动的Service的进程。因为后台Service 没有直接和用户交互,所以他们的优先级比可见Activity或者前台的Service要低一些。但是它们仍然被认为是前台(foreground)进程,除非活动或者可见间的进程需要资源,否则他们不会被终止。当系统终止一个运行的Service后,会在资源可用时尝试重新启动Service(除非告诉系统不要这么做)。
l 后台进程:不可见并且没有任何正在运行的Service的Activity进程。通常会有大量后台进程。Android使用“last-seen-first-killed”(最后一个看到,第一个被终止)来终止他们,从而为前台进程提供资源。
l 空进程:为了提高系统整体性能,Android经常在应用程序的生存期结束之后仍然把他们保存在内存中。Android通过维护这个缓存来减少应用程序被在此启动时的启动时间。
这些进程会根据需要被定期终止。