文档章节

Android线程与进程(一)进程和线程简介、进程的生命周期

k
 kim366
发布于 2016/05/13 19:36
字数 1344
阅读 6
收藏 0

       快速预览
       1.  默认情况下,每个应用运行在其各自的进程中,应用的组件运行在这个进程中。
       2. 任何速度较慢的或可能阻塞主线程的操作都应该在新的线程中运行,以避免影响用户操作。


       概述

       在应用没有组件运行的情况下,系统会为应用开启一个linux进程并创建一个线程,如果存在该应用的组件在运行,那么该应用启动时会在已经存在的进程上运行。也可以将不同的组件安排到不同的独立进程中运行,而且可以为任何进程创建额外线程。<activity>, <service>, <receiver>, 和<provider>等组件支持通过android:process属性指定运行的进程。可以为每个组件指定独立的一个进程,或安排组件共用进程,也可以为应用的所有组件指定同一个进程(让多个应用公用相同的linux 用户id和共同的签名证书)。


进程的生命周期

根据重要程度将进程分为如下五个等级:

1. 前台进程
用户正在进行操作的进程,当有下列时间发生时,一个进程被人为是前台进程。
*当该进程持有一个用户正在与用户交互操作的activity时(该activity的onResume方法已经被调用)。
*当该进程持有一个service,且该service绑定的activity正在跟用户进行交互。
*当该进程持有一个service,且该service正“在前台运行--该service调用了startForeground()。
*当该进程持有一个service,且该service正在执行生命周期回调函数中的一个时(onCreate(),onStart(),onDestroy())
*当该进程持有一个BroadcastReceiver, 且它正在执行onReceiver()方法。
一般情况下,任何情况下,只有少量的前台进程存在。只有在设备内存消耗完,已经无法继续运行时他们才会被杀死,这种情况下,往往是设备内存消耗达到了一个边界值,需要杀死一些前台进程已响应用户操作。

2. 可见进程
这类进程没有任何前台组件,但是仍然能够影响用户屏幕显示,当一个进程满足下列条件中的一种时,该进程就被称为一个可见进程。
* 该进程持有一个不在前台的activity,但是该activity仍然是可见的(此时他的onPause方法已经被调用),比如,前台activity启动了一个Dialog, 这使得之前的activity在其后面是可见的,或者一个activity启动了另外一个弹出式的activity。
* 该进程持有一个service,且该service与一个可见的(前台的)activity绑定。
可见进程是非常重要的,除非必须杀死可见进程才能保证前台进程正常运行,否则,可见进程一般不会被杀死。

3. 服务进程
当一个进程持有一个正在运行且由startService()启动的service,并且该进程不属于前台进程和可见进程可见进程,这类进程被称为服务进程。尽管服务进程不直接与用户可见的任何东西绑定,但通常情况下,用户会比较关心该进程正在做的事情(如音乐播放和文件下载),这种情况下,系统会保持他们的运行状态,除非,内存不足以让这类进程与前台进程和可见进程共存。

4. 后台进程
当进程持有一个用户不可见的activity(该activity的onStop方法已经被调用),着类进程就被称为后台进程。这些进程不会影响用户的所见,系统可以再任何时候杀死他们以释放内存,提供给前台进程,可见进程或服务进程。通常情况下,系统中会有很多后台进程在运行,他们被保持在一个LRU(least recently used)列表中,以确保最近杀死的进程持有一个
用户最近可见的activity。假如一个activity正确地继承了其生命周期方法,且保存了最近的状态,那么杀死其所在的进程不会对用户体验造成可见的影响,因为当用户回退到该activity时,该activity可以恢复他所有的可见状态,可以查看activities文档寻求更多关于保存和恢复activity的更多信息。

5. 空进程

当一个进程不包含任何的活动应用程序组件时,该进程就被称为空进程。 保持该类进程主要是为了缓存, 以便下次启动该组件的时候提高启动时间 ,系统通常杀死此进程主要是为了综合平衡进程间缓存和底层内核缓存之间的系统资源。


Q:除了以上的优先级外,还有其他因素决定进程的优先级吗? 
A:  进程的优先级取决于所有组件中的优先级最高的部分。 
        进程的优先级会根据与其他进程的依赖关系而变化。

本文转载自:http://blog.csdn.net/oyangyujun/article/details/41151837

共有 人打赏支持
k
粉丝 1
博文 129
码字总数 0
作品 0
朝阳
Android性能优化:关于 内存泄露 的知识都在这里了!

前言 在中,内存泄露的现象十分常见;而内存泄露导致的后果会使得应用 本文 全面介绍了内存泄露的本质、原因 & 解决方案,最终提供一些常见的内存泄露分析工具,希望你们会喜欢。 目录 } Li...

Carson_Ho
04/19
0
0
[Android] Android进程与线程基本知识

本文介绍Android平台中进程与线程的基本知识。   很早的时候就想介绍一下Android中的进程和线程,但由于其他的事情一直给耽搁了,直到现在才能和大家一起分享下。   1.Android进程基本知...

枫兮兮
2014/02/24
0
0
android进程与线程详解一:进程

当一个应用的组件开始运行,并且这个应用没有其它的组件在运行,系统会为这个应用启动一个新的Linux进程,这个进程只有一个线程.默认情况下,一个应用的所有组件都运行在一个进程和线程(主...

晨曦之光
2012/03/12
0
0
Android引入广播机制的用意。单线程模型Message、Handler、Message Que.

注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。 Android 的广播机制 在 Android 里面有各种各样的广播,比如电池的使用状态,电话的接收和短信的接收都会产生一...

一别经年
2014/03/15
0
0
分享一份非常强势的Android面试题

马上步入金九银十了,是时候看一些面试题去鹅厂了,接下来我将分享一些面试题,每天总结一点点,希望对大家有所帮助! ListView和RecyclerView区别 参考链接: blog.csdn.net/shu_lance/a… ...

codeGoogle
08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《看图轻松理解数据结构与算法系列》导引贴

最近学习数据结构,遇到一个很喜欢的博主,他的文章图文并茂,理解起来很容易。特此开贴记录,方便反复阅读。 博主主页 https://juejin.im/user/57c3970f79bc440063e58518/posts?sort=popul...

科陆李明
44分钟前
1
0
20.27 分发系统介绍~ 20.30 expect脚本传递参数

分发系统介绍分发系统-expect讲解(也就是一个分发的脚本)场景:业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者lnmp,最好还需要吧代码上传到服务器上;但是因...

洗香香
59分钟前
2
0
设计一个百万级的消息推送系统

前言 首先迟到的祝大家中秋快乐。 最近一周多没有更新了。其实我一直想憋一个大招,分享一些大家感兴趣的干货。 鉴于最近我个人的工作内容,于是利用这三天小长假憋了一个出来(其实是玩了两...

crossoverJie
今天
2
0
软件架构:5种你应该知道的模式

Singleton(单例模式)、仓储模式(repository)、工厂模式(factory)、建造者模式(builder)、装饰模式(decorator)……大概每个上课听讲的程序员都不会陌生——软件的设计模式为我们提供...

好雨云帮
今天
3
0
OSChina 周二乱弹 —— 这只是一笔金钱交易

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《暮春秋色》- 窦唯 / 译乐队 《暮春秋色》- 窦唯 / 译乐队 手机党少年们想听歌,请使劲儿戳(这里) @我没有抓狂:跨服聊...

小小编辑
今天
1K
18

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部