杀死哪个进程来回收资源由进程中的应用程序的优先级决定的。应用程序的优先级与它的组件的最高优先级相同。
当两个应用程序的优先级相同时,那个长时间处于较低优先级的进程会被先杀死。进程的优先级同样受进程间依赖影响,如果一个应用程序依赖于另外一个应用程序的Service或Content Provider的话,那么,提供服务的应用程序至少和接受服务的应用程序一样高的优先级。
所有的应用程序在内存里运行,直到系统需要它的资源来分配给其他的应用程序。
图3-3显示了优先级树,用来决定应用程序被终止的顺序。
正确地构建应用程序来保证它的优先级适合它做的事情是很重要的。如果你不这么做,你的应用程序在某些重要时期可能会被杀死。
下面的列表详细地描述了图3-3中显示的应用程序的状态,解释了怎样由组件决定状态:
❑ Active Process
Active (前台) process是进程中依附的应用程序包含当前与用户交互的组件。这些是Android通过回收资源来极力保护持续响应性的进程。一般,极少拥有像这样的进程,它们最后才被杀死。
Active process包括:
❑ 处于“active”状态的Activity,它们运行在前台来响应用户的事件。在这章中,你将会看到更多关于Activity状态的细节。
❑ Activity, Service, 或者正在执行onReceive事件处理函数的Broadcast Receiver。
❑ 正在执行onStart,onCreate,OnDestroy事件处理函数的Service。
❑ Visible Process
可见但不活动的进程是那些拥有“可见”Activity的进程。由名字想到的,“可见”Activity是那些在屏幕上可见,但不是在前台或不响应用户事件的Activity。这种情况发生在当一个Activity被部分遮盖的时候(被一个非全屏或者透明的Activity)。一般,也极少拥有可见的进程,它们只在极端的情况被杀死来保证Active Process的运行。
❑ Started Service Process
进程中依附着已经启动的Service。Service以动态的方式持续运行但没有可见的界面。因为Service不直接和用户交互,它们拥有比visible Process较低的优先级。它们还是可以被认为是前台进程,不会被杀死,直到资源被active/visible Process需求。你将会在第8章学习到Service。
❑ Background Process
进程中依附的Activity不可见和进程中没有任何启动的Service,这些进程都可以看作是后台进程。在系统中,拥有大量的后台进程,并且Android按照后看见先杀死的原则来杀死后台进程来获取资源给前台进程。
❑ Empty Process
为了改善整个系统的性能,Android经常在内存中保留那些已经走完生命周期的应用程序。Android维护这些缓存来改善应用程序重新启动的启动时间。这些进程在资源需要的时候常常被杀死。
为了提高 我们的Activity中的线程的
线程优先级(Thread-Priority),我们需要在AndroidManifest.xml 中使用 'uses-permission' 这样做:
XML:
<uses-permission id="android.permission.RAISED_THREAD_PRIORITY"/>
现在你可以在你的Activity中使用以下代码改变或提高任何线程的优先级:
Java:
import android.os.Process;
// ...
// -----------------------------------
// Set the priority of the calling thread, based on Linux priorities:
// -----------------------------------
// Changes the Priority of the calling Thread!
Process.setThreadPriority(12);
// Changes the Priority of passed Thread (first param)
Process.setThreadPriority(Process.myTid(), 12);
这里 range 的范围是 -20 (高) 到 +19 (低). 不要选得 太高
最好使用预先定义在 android.os.Process 的constants :
Java:
// Lower is 'more impotant'
Process.THREAD_PRIORITY_LOWEST = 19
Process.THREAD_PRIORITY_BACKGROUND = 5
Process.THREAD_PRIORITY_DEFAULT = 0
Process.THREAD_PRIORITY_FOREGROUND = -5
Process.THREAD_PRIORITY_DISPLAY = -10
Process.THREAD_PRIORITY_URGENT_DISPLAY = -15
分享到:
相关推荐
(1) 设计一个模块,要求列出系统中所有内核线程的程序名、PID 号、进程状态及 进程优先级。 (2) 设计一个带参数的模块,其参数为某个进程的 PID 号,该模块的功能是列出该 进程的家族信息,包括父进程、兄弟进程和...
目的是理解进程调度算法及其应用。 1)设计有5个进程并发执行的模拟调度程序,每个程序由一个PCB表示。 2)模拟调度程序可任选两种调度算法之一实现。 3)程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察...
综合应用下列知识点设计并实现操作系统的进程调度:邻接表,布尔数组,非阻塞输入,图形用户界面GUI,进程控制块,进程状态转换,多级反馈队列进程调度算法。 2、 加深理解操作系统进程调度的过程。 3、 加深理解...
1、 综合应用下列知识点设计并实现操作系统的进程调度:邻接表,布尔数组,非阻塞输入,图形用户界面GUI,进程控制块,进程状态转换,多级反馈队列进程调度算法。 2、 加深理解操作系统进程调度的过程。 3、 加深...
1、 综合应用下列知识点设计并实现操作系统的进程调度:邻接表,布尔数组,非阻塞输入,图形用户界面GUI,进程控制块,进程状态转换,多级反馈队列进程调度算法。 2、 加深理解操作系统进程调度的过程。 3、 加深...
第12章 应用服务器的实现 12.1 创建应用服务器的实例 12.2 状态区编程 12.3 动态数据库的连接 12.4 远程数据模块的建立 第13章 客户端应用程序的设计 13.1 客户端应用程序系统流程和系统功能 13.1.1 系统流程 13.1.2...
3.5 理解应用程序的优先级和进程状态 3.6 分离资源 3.6.1 创建资源 3.6.2 使用资源 3.6.3 To-DoList资源示例 3.6.4 为不同的语言和硬件创建资源 3.6.5 运行时配置更改 3.7 深入探讨Android活动 ...
3.5 理解应用程序的优先级和进程状态 3.6 分离资源 3.6.1 创建资源 3.6.2 使用资源 3.6.3 To-DoList资源示例 3.6.4 为不同的语言和硬件创建资源 3.6.5 运行时配置更改 3.7 深入探讨Android活动 ...
3.5 理解应用程序的优先级和进程状态 3.6 分离资源 3.6.1 创建资源 3.6.2 使用资源 3.6.3 To-DoList资源示例 3.6.4 为不同的语言和硬件创建资源 3.6.5 运行时配置更改 3.7 深入探讨Android活动 3.7.1 创建一个活动 ...
3.5 理解应用程序的优先级和进程状态 49 3.6 分离资源 50 3.6.1 创建资源 50 3.6.2 使用资源 57 3.6.3 To-Do List资源示例 60 3.6.4 为不同的语言和硬件创建资源 61 3.6.5 运行时配置更改 62 3.7 深入探讨...
2.5 小结 第3章 创建应用程序和活动 3.1 Android应用程序的组成部分 3.2 程序清单简介 3.3 使用清单编辑器 3.4 Android应用程序生命周期 3.5 理解应用程序的优先级和进程状态 3.6 分离资源 3.6.1 创建资源 3.6.2 ...
在UNIX操作系统中,每个应用程序的执行都在操作系统内核中登记一个进程标志,操作系统根据分配的标志对应用程序的执行进行调度和系统资源分配。每个进程都有自己的内存单元,进程之间是互相独立的,一个进程一般不...
系统调用是操作系统内核与用户程序、应用程序之间的接口。在UNIX/Linux系统,系统调用以C函数的形式出现。 第2章 进程管理 考核学生对进程定义、进程的状态及其转换、进程的组成、竞争条件和临界区、进程的同步...
13.1 客户端应用程序系统流程和系统功能 13.1.1 系统流程 13.1.2 系统功能 13.2 构建客户端应用程序框架 第14章 动态连接应用服务器的实现 第15章 通用权限管理模块的设计 15.1 系统登录的设计 15.2 权限...
是帮助读者深入探索和掌握公共语言运行时、C#和.NET开发的重要参考,同时也是帮助开发人员构建任何一种应用程序(如Microsoft Silverlight、ASP.NET、Windows Prensentation Foundation、Web服务和控制台应用程序)的...
是帮助读者深入探索和掌握公共语言运行时、C#和.NET开发的重要参考,同时也是帮助开发人员构建任何一种应用程序(如Microsoft Silverlight、ASP.NET、Windows Prensentation Foundation、Web服务和控制台应用程序)的...