Android应用程序类型和进程状态

来自《Android4高级编程》

Android应用程序不能控制自己的生命周期,应用程序组件(Activity、Service等其他组件)必须监听应用程序状态的变化并做出适当的反应,而且特别要注意为随时被终止做好准备。

默认情况下,每个Android应用程序都是通过他们自己的进程运行的,每一个进程都运行在独立的Dalvik实例中。每一个应用程序的内存和进程管理都是由运行时专门进行处理的。

通过在Manifest内对每一个收到影响的应用程序组件节点使用android:process属性,可以使同一个应用程序的组件运行在不同的进程中,或者让多个应用程序共享同一个进程。

1. Android应用程序类型

前台应用程序:只能运行在前台的应用程序,当它不可见时就会被挂起(比如:游戏)。

后台应用程序:和用户交互非常有限,出了配置期间,其生存期的其他时间都是隐藏的(比如:SMS自动回复程序和闹钟程序)。

间歇式应用程序:大多数设计良好的应用程序都归为这类。存在两种极端:更偏向于前台(比如:电子邮件程序和新闻阅读程序)和更偏向于后台(比如:媒体播放器程序)。

Widget和Live Wallpaper:一些应用程序只作为主屏幕Widget或Live Wallpaper出现。

当创建应用程序时,首先需要考虑用户可能使用应用程序的方式,然后再相应地进行设计。

P.S. 此处的挂起是什么含义?

2. 设计考量(都有哪些应用程序状态?)

  2.1 前台应用程序

创建前台应用程序,需要仔细考虑Activity的生命周期,这样Activity才能在前台和后台之间连贯流畅地切换。

没有正在运行服务的后台程序将是Android Resource Manager首先要清除的对象。这就意味着,当应用程序进入后台时需要保存其状态, 这样当它返回到前台时,就可以正确地恢复到相同的状态。

对前台应用程序来说,呈现出直观的绚丽用户体验也是非常重要的。

  2.2 后台应用程序

这些应用程序自动在后台运行,几乎没有用户输入。经常侦听由硬件、系统或其他应用程序产生的消息或动作,而不是依赖用户交互。

创建完全不可见的服务也是可以的,最好能够提供用户控制入口,让用户确信这些服务正在运行。

Service和Broadcast Receiver两者是后台应用程序的驱动力。

  2.3 间歇式应用程序

通常情况下,可能需要创建能够对用户输入做出反应且当它不是前台Activity的时候仍然能够发挥作用的应用程序。需要考虑应用程序和用户交互时的状态:当应用程序可见时,更新Activity UI;不可见时,发送通知来让用户了解其最新状态。

在开发这种类型的应用程序时,必须确保应用程序的后台进程表现良好,对设备的电量造成最小的影响。

  2.4 Widget和Live Wallpaper

通过创建Widget和Live Wallpaper,可以创建一些交互式可视组件,使用户的主屏幕上增加一些功能。

只包含Widget的应用程序通常用于显示动态信息,例如电量、天气或者日期。

Android主动管理它的资源,它会采取任何措施来保证稳定流畅的用户体验。也就是说:在必要的时候,进程有时候会在没有警告的情况下被终止,这样就可以为高优先级的应用程序释放资源。

Android系统是如何回收资源的?和上述讲到的应用程序优先级有什么关系?

Android系统回收资源的时候,进程被终止的顺序是由他们的应用程序的优先级所决定的。一个应用程序的优先级等同于它的优先级最高的组件的优先级。所有Android应用程序都会保持在内存中运行,直到系统需要释放它的资源供其他应用程序使用为止。

通过合理的组织应用程序来保证他具有能够正常工作的适当的优先级是非常重要的(也就是让应用程序具备某个级别的优先级)。如果没有做到这一点,则应用程序就可能在执行某些比较重要的操作时被终止,或者在不再需要的时候保持运行。

活动进程Active Process:活动进程也称为是前台进程,指那些有组件正和用户进行交互的应用程序组件。这些进程的数量非常少,只有到最后关头才会终止这些进程。包括:处于活动状态的Activity,即那些位于前台并对用户事件进行响应;正在执行onReceive()事件处理程序的Broadcast Receiver;正在执行相关回调的的Service;正在运行、且已被标记为在前台运行的Service。

可见进程:可见但是非活动的进程指那些驻留“可见”Activity的进程。

启动Service进程:已经启动的Service的进程。或者称为是后台的Service,该Service没有直接和用户交互,比可见Activity和前台Service的优先级别低。

后台进程:不可见、并且没有任何正在运行的Service的Activity的进程。

空进程:为了提高系统整体性能,Android经常在应用程序的生存期结束之后仍然把它们保留在内存中,Android通过维护这个缓存来减少应用个程序被再次启动时的启动时间。通常这些进程会根据需要被定期终止。

posted @ 2017-02-12 21:33  jamesK4W  阅读(2184)  评论(0编辑  收藏  举报