来自《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通过维护这个缓存来减少应用个程序被再次启动时的启动时间。通常这些进程会根据需要被定期终止。

Android应用程序类型和进程状态的更多相关文章

  1. Android平台程序崩溃的类型及原因列举

    Android平台程序崩溃大家都应该遇到过,force close和ANR应该是大家遇到较多的. 这里把Android平台程序崩溃的各种类型做一个简述和原因列举. 1.ANR(可见ANR): 发生场景 ...

  2. Android 虚拟机Dalvik、Android各种java包功能、Android相关文件类型、应用程序结构分析、ADB

    Android虚拟机Dalvik Dalvik冲击 随着Google 的AndroidSDK 的发布,关于它的API 以及在移动电话领域所带来的预期影响这些方面的讨论不胜枚举.不过,其中的一个话题在J ...

  3. 与Android应用程序相关的文件目录都有哪些?(转载)

    与Android应用程序相关的文件目录都有哪些? | 浏览:1312 | 更新:2014-09-28 19:43 | 标签:android 一.方法介绍:   每个Android应用程序都可以通过Co ...

  4. android的程序运行数据存放在哪里?

    Android应用开发中,给我们提供了5种数据的存储方式1 使用SharedPreferences存储数据2 文件存储数据3 SQLite数据库存储数据4 使用ContentProvider存储数据5 ...

  5. Android应用程序窗口(Activity)与WindowManagerService服务的连接过程分析

    在前两文中,我们分析了Activity组件的窗口对象和视图对象的创建过程.Activity组件在其窗口对象和视图对象创建完成之后,就会请求与WindowManagerService建立一个连接,即请求 ...

  6. Android应用程序窗口(Activity)的视图对象(View)的创建过程分析

    从前文可知道,每一个Activity组件都有一个关联的Window对象,用来描述一个应用程序窗口.每一个应用程序窗口内部又包含有一个View对象,用来描述应用程序窗口的视图.应用程序窗口视图是真正用来 ...

  7. Android开发之 Android应用程序目录结构解析

    建立的HelloWorld的应用项目,其代码是由ADT插件自动生成的,形成Android项目特有的结构框架. 接下来让我带领大家解析一个Android程序的各个组成部分,这次我们拿一个Hello,Wo ...

  8. Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析(转)

    在前文中,我们分析了Android应用程序窗口的运行上下文环境的创建过程.由此可知,每一个Activity组件都有一个关联的ContextImpl对象,同时,它还关联有一个Window对象,用来描述一 ...

  9. Android应用程序构成

    一个Android应用程序一般是由以下4个组件构成的: 活动(Activity) 意图(Intent) 服务(Service) 内容提供器(Content Provider) 这4个组件是构成andr ...

随机推荐

  1. ansible基本使用方法

    一.ansible的运行流程 ansible是基于ssh模块的软件,所以主控端和被控端的ssh服务必须正常才能保证ansbile软件的可用性. 检查ssh服务是否正常:   systemctl sta ...

  2. bootstrap浅谈

    学习地址:http://www.runoob.com/bootstrap/bootstrap-tutorial.html 自己练习了下 主要是使用了bootstrap中包含的class类样式,只要给相 ...

  3. Appium测试,定位H5元素(HTML5)

    代码如下: public static void main(String[] args) {         try {             AndroidDriver driver;       ...

  4. Django订单接入支付宝

    1.. 去支付宝申请 https://open.alipay.com/platform/home.htm 注:因为创建应用正式接入支付宝需要营业执照,所以我们可以使用沙箱环境来测试. 2. 一次选择管 ...

  5. ArcGis恢复初始设置(默认设置、出厂设置)的方法

    警告:下面的操作涉及更改操作系统的重要组成部分.必要时,请咨询计算机系统专业人士. 重命名 ESRI 文件夹即对 ArcGIS 恢复出厂设置,因此必须重新安装当前安装的所有第三方工具.自定义脚本和自定 ...

  6. css浮动(float)全方位案例解析

    前言 浮动最早的使用是出自<img src="#" align="right" />,用于文本环绕图片的排版处理.当然也是一种常用的布局方式. fl ...

  7. spring+springMVC+mybatis简单整合

    spring+springMVC+mybatis简单整合, springMVC框架是spring的子项目,所以框架的整合方式为,spring+Mybatis或springMVC+mybatis. 三大 ...

  8. nnet3的并行化训练

    num_epochs=1 num_archives=64 args.num_jobs_initial=3 args.num_jobs_final=8 num_iters=2*num_epochs*nu ...

  9. 移动端bug集合

    移动端软键盘遮挡输入框&IOS移动端点击输入框字体放大&IOS点击闪烁 移动端软键盘遮挡输入框  ——>  转载自: https://www.jb51.net/article/1 ...

  10. eclipse快捷键 (包括查找类、方法、变量)

    ♦[Ct rl+T] 搜索当前接口的实现类 1. [ALT +/] 智能提示     此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类.方法和属性的名字时 ...