Android - 应用程序的优先级和进程状态
Android在回收资源的时候,进程被终止的顺序是由它们的应用程序的优先级所决定的。一个应用程序的优先级等同于它的优先级最高的组件的优先级。
当两个应用程序有相同的优先级时,在较低优先级状态运行时间最长的进程将会首先被终止。进程的优先级也收到进程间依赖性的影响。如果一个应用程序依赖于第二个应用程序所提供的Service或者Content Provider,那么第二个应用程序至少会拥有与它所支持的这个应用程序相同的优先级。
所有的Android应用程序都会保持在内存中运行,知道系统需要释放它的资源 供其它应用程序使用时为止。
通过合理地组织应用程序来保证它具有能够正常工作的适当的优先级时非常重要的。如果没有做到这一点,则应用程序就可能在执行某些比较重要的操作时被终止,或者在不再需要的时候保持运行。
1)Active进程 Active(前台)的进程是指那些有组件正和用户进行交互的应用程序的进程。这些都是Android尝试通过回收其它应用程序的资源来使其保持相应的进程。这些进程的数量非常少,只有到最后的关头才会终止这些进程
Active的进程包括:
1;处于活动状态的Activity,也就是说,它们位于前台并对用户事件进行响应
2;正在执行onReceive事件处理程序的Broadcast Receiver
3;正在执行onStart、onCreate或者onDestroy事件处理程序的Service
4;正在运行、且已被标记为在前台运行的Service
2)可见进程 可见但是非活动的进程是指那些驻留”可见“Activity的进程。顾名思义,可见的Activity能被用户看到,但是它们并不在前台运行或者能对用户事件作出反应。例如:当一个Activity被部分遮挡时(被一个非全屏或者透明的Activity遮挡)就会出现这种情况。这些进程的数量也很少,只有在资源极度匮乏的环境下,为保证Activity进程继续执行时才会终止这些进程。
3)启动Service进程 已经启动的Service的进程。因为后台Service没有直接和用户交互,所以他们的优先级要比可见Activity或前台Service低一些。但是他们仍然被认为是前台(foreground)进程,除非活动或者可见的进程需要资源,否则不会终止它们。当系统终止一个运行的Service后,会在资源可用时尝试重新启动Service(除非告诉系统不要这么做)
4)后台进程 不可见、并且没有任何正在运行的Service的Activity的进程。通常会有大量的后台进程,Android将使用”最后一个被看到,第一个被终止“(last-seen-first-killed)的方式来终止他们,从而为前台进程提供资源。
5)空进程 为了提高系统整体性能,Android经常在应用程序的生存周期结束之后仍然把它们保存在内存中。Android通过维护这个缓存来减少应用程序被再次启动时的启动时间。通常这些进程会根据需要被定期终止。
转载于:https://www.cnblogs.com/brantliu/p/4866513.html
Android - 应用程序的优先级和进程状态相关推荐
- Android 应用程序的优先级和进程状态
Android会主动管理自己的资源,它会采取任何措施来保证稳定流畅的用户体验.这就意味着,在android管理进程的时候,会在没有任何提示或警告的前提下,终止一些进程,以便为优先级高的进程提供资源. ...
- android 后台程序 设置 优先级,Android应用程序防止被LMK干掉
引用 Android 系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用.当系统觉得当前的资源非常有限的时候,为了保 证一些优先级高的程序能运行,就会 ...
- android应用程序的生命周期,Android应用程序的生命周期.doc
Android应用程序的生命周期.doc Android应用程序的生命周期 描述:程序的生命周期是在Android系统中进程从启动到终止的所有阶段,也就是Android从启动到停止的全过程.==程序的 ...
- Android应用程序启动Binder线程源码分析
Android的应用程序包括Java应用及本地应用,Java应用运行在davik虚拟机中,由zygote进程来创建启动,而本地服务应用在Android系统启动时,通过配置init.rc文件来由Init ...
- Android中程序与Service交互的方式
本文将通过三大部分来讲解Android中程序与Service的交互方式,这里说的交互方式指的是如何与Service进行消息的传递,比如:从Service中获取信息,向Service发送信息等等.举个简 ...
- Android 中设置线程优先级的正确方式(2种方法)
Android 中设置线程优先级的正确方式(2种方法) 在 Android 中,有两种常见的设置线程优先级的方式: 第一种,使用 Thread 类实例的 setPriority 方法,来设置线程优先级 ...
- Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP
Xposed Xposed能够勾住(Hook) Android应用程序对象的方法,实现AOP,一个简单的例子: public class WebViewHook implements IXposedH ...
- Android应用程序消息处理机制(Looper、Handler)分析(2)
我们再回到NativeMessageQueue的构造函数中,看看JNI层的Looper对象的创建过程,即看看它的构造函数是如何实现的,这个Looper类实现在frameworks/base/libs/ ...
- 电子界卡组构建2019_2018–2019年构建现代Android应用程序的路线图
电子界卡组构建2019 Kriptofolio应用程序系列-简介 (Kriptofolio app series - Introduction) Welcome to this series of b ...
最新文章
- 云计算,能回答地球最终流浪到哪里吗?
- 单片机数码管从00到99C语言_MSP430单片机轻松入门与实践 — 畅学单片机
- Scala入门到精通——第四节 Set、Map、Tuple、队列操作实战
- 【2010福建】收稻子 (校BSOJ1114)
- 七牛直播云服务技术揭秘
- 天地图怎么看历史图像_解密:看猪八戒是怎么由一头猪变成天蓬元帅的
- 格式化代码php,格式化php代码的两种方法
- IntelliJ IDEA配置与搭建web项目入门使用
- java多线程线程池_Java多线程——线程池(ThreadPool)
- pku1363 Rails
- 世界各个国家及其国家代码
- python南开大学王凯_Python入门与实战
- 武汉星起航跨境电商——亚马逊日本站JCT政策将实现改革
- tftp工作流程计算机网络,tftpd32使用方法,[转载]利用GhostSrv+Tftpd32网络克隆攻略
- 【趣题】几堆石子轮流捡,谁捡到最后的石子算输的游戏
- HDU - 6638
- .NET 函数调用反转
- scikit-image图像处理入门
- 【Java】Date类型获取年月日时分秒的两种方法(12小时制、24小时制)
- 数据库的备份与恢复(完全备份,增量备份)
热门文章
- 使用frp实现将内网映射到公网 无需花生壳
- PlantUML in a nutshell(官方文档)
- NB贝叶斯平凡而又神奇的贝叶斯方法
- 参与就有1000块,30W奖池你占一半 | 帆软开发者大赛招募
- html js关闭浏览器,js关闭页面(兼容浏览器)
- android 生成apk名字自动已,Jenkins打包android应用时自动签名apk详解
- ps修改dds贴图_ZBrush建模师教你zbrush与Photoshop绘制人脸贴图,听仔细了哈
- php载入内存的是本地代码吗,常量和静态变量会先载入内存后在进行执行php代码...
- python判断字符串出现的次数_【如何判断python字符串出现次数?这几种方法你一定要学会】- 环球网校...
- workbench设置单元坐标系_ANSYS经典案例在Workbench中实现分享连载(三)