文档章节

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 Broadcast 生命周期详细分析

Broadcast的生命周期只有一个回调方法:void onReceive(Context curContext,Intent broadcastMsg)。当broadcast消息到达接收者时,Android会调用他的onReceive()方法,并且传递包含这个信息...

迷途d书童
2012/04/26
652
0
Android性能优化:关于 内存泄露 的知识都在这里了!

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

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

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

枫兮兮
2014/02/24
0
0
Android Service 服务(一)—— Service

一、 Service简介 Service是android 系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的级别差不多,但不能自己运行只能后台运行,并且可以和...

长平狐
2013/01/06
245
0
Android 进程和线程(一)

当一个应用程序组件启动并且应用还没有运行任何其他组件时,Android系统会给应用程序启动一个新的带有单一执行线程的Linux进程。默认情况下,同一应用程序的所有组件都运行在相同的进程和线程...

长平狐
2012/10/16
74
0

没有更多内容

加载失败,请刷新页面

加载更多

排序--二分插入排序

二分插入排序是对直接插入排序的一个优化,在排序--直接插入排序中已经分析过直接插入排序的最坏时间复杂度是平方级别的,二分插入排序则是通过二分查找对寻找插入位置进行了优化,在找到插入...

FAT_mt
4分钟前
0
0
Quora点赞过万!麻省理工5.0GPA十条学习技巧

美国版知乎Quora上有个问题是:顶尖学生如何学习。排名第一的答案已经赢得13.5K次点赞,我们翻译出来分享给大家。 MIT normally does not rank its students. So if you hear that someone g...

乔老哥
17分钟前
0
0
IOC的学习(1)

1.IOC理论概要 java中,一个对象A怎么才能调用对象B? 当一个对象的构建,需要多个其他对象时,对象和对象有复杂的构建关系。spring帮助我们维系对象的依赖关系,降低系统的实现成本,前提是...

杨健-YJ
29分钟前
3
0
Spring 的 getBean 方法源码解析

文本将从以下几个方面介绍 相关文章 FactoryBean 接口 BeanFactory 接口 BeanFactory 接口 和 FactoryBean 接口的区别 getBean 方法的源码解析 Spring 循环依赖的解决方式 相关文章 Spring 中...

TSMYK
33分钟前
1
0
PTA-基础编程题目集-7-14 求整数段和

给定两个整数A和B,输出从A到B的所有整数以及这些数的和。 输入格式: 输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。 输出格式: 首先顺序输出从A到B的所有整数,每...

niithub
39分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部