【Android】の基础——进程优先级
来源:互联网 发布:linux编程中exit() 编辑:程序博客网 时间:2024/05/21 21:42
系统根据在进程中在运行的组件及组件的状态,为每一个进程分配了一个优先级等级。优先级最低的进程首先被杀死。这个进程重要性的层次结构主要有五个等级。
五个进程等级
1.前台进程(Foreground process)
是前台进程的三种情况:
- 进程持有一个正在与用户交互的Activity。
进程持有一个Service,这个Service处于这几种状态:
- Service与用户正在交互的Activity绑定。
- Service是在前台运行的,即它调用了 startForeground()。
- Service正在执行它的生命周期回调函数(onCreate(), onStart(), or onDestroy())。
- 进程持有一个BroadcastReceiver,这个BroadcastReceiver正在执行它的 onReceive() 方法。
2.可见进程(Visible process)
如果一个进程不含有任何前台的组件,但仍可被用户在屏幕上所见。当满足如下任一条件时,进程被认为是可见的:
- 进程持有一个Activity,这个Activity不在前台,但是仍然被用户可见(处于onPause()调用后又没有调用onStop()的状态,比如,前台的activity打开了一个对话框,这样activity就会在其后可见)。
- 进程持有一个Service,这个Service和一个可见的(或者前台的)Activity绑定。
可见的进程除非是为了保证所有前台进程的运行而不得不杀死,一般不会被销毁。
3.服务进程 (Service process)
如果一个进程中运行着一个service,这个service是通过 startService() 开启的,并且不属于上面两种较高优先级的情况,这个进程就是一个服务进程。
尽管服务进程没有和用户可以看到的东西绑定,但是它们一般在做的事情是用户关心的,比如后台播放音乐,后台下载数据等。所以系统会尽量维持它们的运行,除非系统内存不足以维持前台进程和可见进程的运行需要。
4.后台进程 (Background process)
如果进程不属于上面三种情况,但是进程持有一个用户不可见的activity(activity的onStop()被调用,但是onDestroy()没有调用的状态),就认为进程是一个后台进程。
后台进程不直接影响用户体验,系统会为了前台进程、可见进程、服务进程而任意杀死后台进程。
通常会有很多个后台进程存在,它们会被保存在一个LRU (least recently used)列表中,这样就可以确保用户最近使用的activity最后被销毁,即最先销毁时间最远的activity。
5.空进程
如果一个进程不包含任何活跃的应用组件,则认为是空进程。
例如:一个进程当中已经没有数据在运行了,但是内存当中还为这个应用驻留了一个进程空间。
保存这种进程的唯一理由是为了缓存的需要,为了加快下次要启动这个进程中的组件时的启动时间。系统为了平衡进程缓存和底层内核缓存的资源,经常会杀死空进程。
如何避免后台进程被杀死:
- 调用startForegound,让你的Service所在的线程成为前台进程
- Service的onStartCommond返回START_STICKY或START_REDELIVER_INTENT
- Service的onDestroy里面重新启动自己
- 【Android】の基础——进程优先级
- Android基础总结——进程优先级及提高优先级的方法
- Android基础总结——进程优先级及提高优先级的方法(Service尽量不死之法)
- Android基础总结——进程优先级及提高优先级的方法(Service尽量不死之法)
- Android基础总结——进程优先级及提高优先级的方法(Service尽量不死之法)
- Android基础总结——进程优先级及提高优先级的方法(Service尽量不死之法)
- Android基础之进程的优先级
- Android文档——进程优先级与线程
- android 进程优先级
- android 进程优先级
- android 进程优先级
- android 进程优先级
- android 进程的优先级
- Android 进程优先级
- android 进程优先级
- Android笔记进程优先级
- android进程优先级
- android 进程优先级
- 大数据时代--windows下spark的安装与配置教程
- 第987期机器学习日报(2017-06-01)
- 第982期机器学习日报(2017-05-27)
- 第972期机器学习日报(2017-05-17)
- 【MyEcplise SVN】myEcplise上安装SVN的多种方式
- 【Android】の基础——进程优先级
- oracle 还原被drop的表
- 当当开源sharding-jdbc,轻量级数据库分库分表中间件
- 软件工具-[笔记管理]mybase工具-【维护-修复数据库】
- python运算符
- java实现的用插入法进行排序
- Ultimaker 开源3D打印切片软件 Cura 3.0.3 3.x 版本(win64)下载
- Solve the Equation问题及解法
- 第958期机器学习日报(2017-05-03)