Android应用程序无法控制自己的生命周期,应用程序组件必须监听应用程序的变化并做出适当的反应,特别要注意为随时可能到来的终止做好准备。
每个Android应用都是通过自己的进程运行的,每个进程又都运行在独立的Dalvil实例中。所有应用程序的内存和进程都有运行时统一管理。
Android主动管理它的资源,它可以在没有警告的情况下终止进程(及其应用程序)以确保流程的用户体验。
一、应用程序的优先级与进程状态
1、应用程序优先级与Android资源回收
Android应用程序的优先级不是预先设定的一个静态值,而是根据应用程序的运行状态来动态确定的。一个应用程序的优先级等同于它的所有组件中优先级最高者的优先级。
Android回收资源时,进程被终止的顺序是它们的应用程序的优先级决定的。
两个优先级相同的应用,在较低优先级运行时间最长的进程将会被首先终止。
进程的优先级也受到进程间依赖性的影响。如果A进程依赖于B进程提供的组件(service或者content provider),那么B进程至少会拥有A进程相同的优先级。
所有Android应用程序均自始至终运行在内存中,直到系统回收其资源(这时必会引起应用程序终止)为止。
2、进程状态
进程状态有:活动进程,可见进程,启动服务进程,后台进程,空进程。这些进程的优先级依次降低。
a、活动进程是指那些有组件正在和用户进行交互的应用程序进程。具体来说具有如下情形之一就是活动进程
有处于活动状态的Activity;
有正在执行onReceive时间处理程序的BroadcastReceiver
有正在执行onStart、onCreate、onDestory时间处理程序的Service
正在运行且已经被标记为前台运行的Service
b、可见进程是指那些包含“可见Activity”组件的进程。所谓“可见Activity”是指,可以被用户看见,却不能与用户交互的Activity。比如,一个Activity A被非全屏的Activity B部分遮 住,此时A就是“可见Activity”,而B则是活动Activity。
c、启动服务进程是指那些包含已启动的Servcie组件的进程。
d、后台进程是指那些既不包含任何可见组件也不包含任何已启动Service的进程。
e、为了提高系统性能,Android经常会在应用程序生命周期结束之后仍然把它们留在内存中,这样可以通过这个缓存来节省应用程序再次启动的启动时间。这样的进程就是空进程。
活动进程一般来说数量非常少,拥有关键优先级,系统不到最后关头不会终止这些进程。可见进程和启动服务进程数量也很少具有高优先级,并且系统在终止一个正在运行的service之后会在资源可用时尝试重启这个Service(除非明确告诉系统不需重启)。后台进程和空进程具有低优先级,Android在系统资源匮乏时遵循“最后一个被看到,最先被终止”的原则来终止后台进程,对于空进程系统则会根据需要定时清理。