文档章节

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

k
 kim366
发布于 2016/05/13 19:36
字数 1344
阅读 6
收藏 0
点赞 2
评论 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:  进程的优先级取决于所有组件中的优先级最高的部分。 
        进程的优先级会根据与其他进程的依赖关系而变化。

© 著作权归作者所有

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

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

Carson_Ho ⋅ 04/19 ⋅ 0

VirtualApk启动插件Activity

插件以APK的形式保存在SD卡上,通过startActivity方式启动Activity需要首先将Activity注册到AndroidManifest.xml,如果没有注册就会出现如下错误。 要实现插件Activity的启动需要解决以下问题...

JasmineBen ⋅ 05/16 ⋅ 0

Andromeda:适用于多进程架构的组件通信框架(下)

  首先插播一条自己的广告——有些朋友可能都知道了,我最近创建了一个知识星球,在这里试了一周,发现私密圈子的效率果然比群要好很多,付费门槛过滤掉了大部分广告和没有意愿学习分享的人...

Android群英传 ⋅ 05/29 ⋅ 0

Android基础性能数据获取(api或/proc/读取)

主要资料参考 Android系统源码在线查看网址 Linux平台Cpu使用率的计算 腾讯开源移动端性能测试APP:GT 3.1 内存篇 内存:表示当前进程内存的使用情况,内存占用过高可能会引起内存抖动,或O...

某杰 ⋅ 05/07 ⋅ 0

Android中为什么主线程不会因为Looper.loop()里的死循环卡死?

在知乎上的问题,觉得很好,就转载过来记录一下。 Android程序的运行入口是android.app.ActivityThread类的main()方法。(android-23) 而根据Looper.loop()源码可知里面是一个死循环在遍历消息...

xingjm8511 ⋅ 2016/06/12 ⋅ 0

android -------- java虚拟机和Dalvik虚拟机

java虚拟机 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚...

切切歆语 ⋅ 04/29 ⋅ 0

Android Service 服务(一)—— Service

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

长平狐 ⋅ 2013/01/06 ⋅ 0

Binder学习(一)Android中的进程

概述 我么知道,Android底层是基于Linux内核的,当某个应用组件启动且该应用没有运行其他任何组件时,Android 系统会使用单个执行线程为应用启动新的 Linux 进程。默认情况下,同一应用的所有...

wustor ⋅ 2017/11/23 ⋅ 0

Android的进程与线程

Android的进程与线程: 一.Android中的进程 默认情况下, 同一个application中的所有component运行在同一个linux进程下. 启动一个component A时, 如果已存在处于运行状态中的component B, 且A...

SRain215 ⋅ 2016/03/16 ⋅ 0

[Android] Android进程与线程基本知识

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

枫兮兮 ⋅ 2014/02/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

IDEA创建SpringMVC+Mybatis+Maven项目

视频如下(加载有点慢请见谅,服务器不太好): 视频

影狼 ⋅ 21分钟前 ⋅ 0

前阿里P8架构师:精准定制Java架构师学习计划!

可以说,Java是现阶段中国互联网公司中,覆盖度最广的研发语言,掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地。 有不少朋友问,除了掌握J...

java高级架构牛人 ⋅ 24分钟前 ⋅ 0

zookeper学习

https://blog.csdn.net/u012152619/article/category/6470028

~少司命~ ⋅ 25分钟前 ⋅ 0

Spring MVC ,JSON,JQuery,不懂JQuery,跳过了

/spring-mvc-study/src/main/webapp/course_json.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD ......

颖伙虫 ⋅ 25分钟前 ⋅ 0

2018上海云栖大会workshop-日志数据采集与分析对接

摘要: 日志数据采集与分析对接 课程描述 通过日志服务采集用户、数据库、业务等访问数据。演示对于业务日志分析与处理,程序日志查询与监控,打通日志与数据仓库对接案例。 日志种类 网站访...

阿里云云栖社区 ⋅ 26分钟前 ⋅ 0

mahout demo

package com.datamine.CollaborativeFiltering.mysql; import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood; import org.apache.mahout.cf.taste.impl.recommend......

xiaomin0322 ⋅ 27分钟前 ⋅ 0

red hat openstack 12配置要求

安装 openstack 之前,一般要规划整个系统中,到底要多少台机器来参与openstack, 根据rhosp12的官方文档: 最低要求是3台物理机,1台作为director,一台作为 controller ,一台作为computer....

tututu_jiang ⋅ 29分钟前 ⋅ 0

Rocket-Chip在GitHub上的各个源码

在github上通过搜索Rocket-chip可以得到36个结果:其中 https://github.com/freechipsproject/rocket-chip https://github.com/ucb-bar/riscv-boom https://github.com/ucb-bar/fpga-zynq (......

whoisliang ⋅ 34分钟前 ⋅ 0

【HAVENT原创】CentOS 6.5 下 Nginx 的安装与配置

nginx是轻量级的Web服务器、反向代理服务器及邮件服务器,具有占用内存少,并发能力强的优点,已被广泛应用。本文介绍目前最新版本 1.12.2 的安装。 各版本nginx下载地址:http://nginx.org/...

HAVENT ⋅ 40分钟前 ⋅ 0

查看linux系统重启之前的log -- last_kmsg

当 Linux Kernel 出现 BUG 的时候,后走入 panic flow,这个时候由于 Kernel 出现了严重的问题,adbd 也无法响应 adb 连接请求,这个时候想透过读取 Kernel Log Buffer 来看 Kernel Log 是不...

zyzzu ⋅ 41分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部