Android进程学习

翻译 2015年11月17日 20:47:33

Android进程

默认情况下,同一应用的所有组件属于一个进程。 如果内存不足,而其他为用户提供更紧急服务的进程又需要内存时,Android 可能会决定在某一时刻关闭某一进程。在被终止进程中运行的应用组件也会随之销毁。 当这些组件需要再次运行时,系统将为它们重启进程。决定终止哪个进程时,Android 系统将权衡它们对用户的相对重要程度。

进程生命周期

Android 系统将尽量长时间地保持应用进程,但为了新建进程或运行更重要的进程,最终需要清除旧进程来回收内存。 为了确定保留或终止哪些进程,系统会根据进程中正在运行的组件以及这些组件的状态,将每个进程放入“重要性层次结构”中。 必要时,系统会首先消除重要性最低的进程,然后是重要性略逊的进程,依此类推,以回收系统资源。

重要性层次结构一共有 5 级。以下列表按照重要程度列出了各类进程(第一个进程最重要,将是最后一个被终止的进程):

1.前台进程

用户当前操作所必需的进程。如果一个进程满足以下任一条件,即视为前台进程:

通常,在任意给定时间前台进程都为数不多。只有在内在不足以支持它们同时继续运行这一万不得已的情况下,系统才会终止它们。 此时,设备往往已达到内存分页状态,因此需要终止一些前台进程来确保用户界面正常响应。

没有任何前台组件、但仍会影响用户在屏幕上所见内容的进程。 如果一个进程满足以下任一条件,即视为可见进程:

可见进程被视为是极其重要的进程,除非为了维持所有前台进程同时运行而必须终止,否则系统不会终止这些进程。

正在运行已使用 startService() 方法启动的服务且不属于上述两个更高类别进程的进程。尽管服务进程与用户所见内容没有直接关联,但是它们通常在执行一些用户关心的操作(例如,在后台播放音乐或从网络下载数据)。因此,除非内存不足以维持所有前台进程和可见进程同时运行,否则系统会让服务进程保持运行状态。

2.可见进程

没有任何前台组件、但仍会影响用户在屏幕上所见内容的进程。 如果一个进程满足以下任一条件,即视为可见进程:

  • 托管不在前台、但仍对用户可见的 Activity(已调用其 onPause() 方法)。例如,如果前台 Activity 启动了一个对话框,允许在其后显示上一 Activity,则有可能会发生这种情况
  • 托管绑定到可见(或前台)Activity 的 Service

可见进程被视为是极其重要的进程,除非为了维持所有前台进程同时运行而必须终止,否则系统不会终止这些进程。

3.服务进程

正在运行已使用 startService() 方法启动的服务且不属于上述两个更高类别进程的进程。尽管服务进程与用户所见内容没有直接关联,但是它们通常在执行一些用户关心的操作(例如,在后台播放音乐或从网络下载数据)。因此,除非内存不足以维持所有前台进程和可见进程同时运行,否则系统会让服务进程保持运行状态。

4.后台进程

包含目前对用户不可见的 Activity 的进程(已调用 Activity 的 onStop() 方法)。这些进程对用户体验没有直接影响,系统可能随时终止它们,以回收内存供前台进程、可见进程或服务进程使用。 通常会有很多后台进程在运行,因此它们会保存在 LRU (最近最少使用)列表中,以确保包含用户最近查看的 Activity 的进程最后一个被终止。如果某个 Activity 正确实现了生命周期方法,并保存了其当前状态,则终止其进程不会对用户体验产生明显影响,因为当用户导航回该 Activity 时,Activity 会恢复其所有可见状态。 

5.空进程

不含任何活动应用组件的进程。保留这种进程的的唯一目的是用作缓存,以缩短下次在其中运行组件所需的启动时间。 为使总体系统资源在进程缓存和底层内核缓存之间保持平衡,系统往往会终止这些进程。

通常情况下Android进程不会被操作系统杀死,若想手动停止进程,可采用如下的方式:

(1)Java法:使用System.exit(0)强制退出当前应用

(2)Android法:Progress.kill(Progress.mypid())退出当前进程



Android 性能优化之多进程开发

前言:android使用多进程重构项目架构,可以分担主进程压力以免因资源消耗过大被crash掉,另外多进程相互监听唤醒,可以使应用程序长期驻守后台接受即时消息和通知,防止应用被系统回收。下面就总结一下...
  • csdn_aiyang
  • csdn_aiyang
  • 2017年04月08日 19:20
  • 698

Android中的五大进程

一、前台进程(Foreground process):   用户当前工作所需要的。一个进程如果满足下列任何条件被认为是前台进程:   正运行着一个正在与用户交互的活动(Activity对象的onR...
  • a411540365a
  • a411540365a
  • 2016年09月22日 17:26
  • 419

Android中的进程简介(可见进程,前台进程,后台进程等)

我最近在看一些Android进程方面的知识,发现自己在这方面有些欠缺。所以在查阅完资料后特意在此做一下笔记,巩固这方面的知识。 Android中有多种进程,我列出下面几种:前台进程,可见进程,服务进...
  • y505772146
  • y505772146
  • 2016年08月19日 15:10
  • 3727

Android进程和线程的区别

恩恩,今天参加阿里的面试,被问到Android中进程和线程的区别,着实把我伤脑了,表示平时开发的时候只知道线程,并没有去仔细关注过进程,所以下来特地去查了以下资料,先说说线程: (1)在Androi...
  • qq_17475155
  • qq_17475155
  • 2016年03月15日 20:02
  • 4866

Android IPC机制(一)开启多进程

1. 为何要开启多进程 为何开启android应用要开启多进程,主要有以下几点: 单进程所分配的内存不够,需要更多的内存。在早期android系统只为一个单进程的应用分配了16M的可用内存,随着手机...
  • itachi85
  • itachi85
  • 2016年01月02日 13:44
  • 10204

android应用创建子进程的方法探究

android应用创建子进程的方法探究 1:前言   android应用开发,当前大多数软件还是停留在java层进行开发,然而android真正可玩的地方,偏偏是本地语言c与c++,借助JNI这个桥梁...
  • a332324956
  • a332324956
  • 2013年06月17日 19:29
  • 8612

Android中获取进程的有关信息

android进程信息 应用程序内存
  • wuyinlei
  • wuyinlei
  • 2016年01月03日 19:22
  • 4153

android杀死进程

通常我们说缓存就是暂时把没在前台的程序放在内存里,比方说我打开短信应用,然后退回到Launcher打开微信,那么短信就成了所谓的后台程序放在了RAM里,这时候短信应用什么也不会干,就是像一个安静的美男...
  • u010852160
  • u010852160
  • 2016年07月13日 18:32
  • 218

Android跨进程访问(四大组件)- Broadcast Receiver跨进程访问

(1)在应用中接收系统其他应用发出的广播 广播跨进程通讯是一种被动的访问方式。当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。这就象电台进行广播一样,听众只能被动地收听,而不能主动与...
  • u010274120
  • u010274120
  • 2015年09月18日 14:51
  • 1054

Android进程分类与管理

Android采 取了一种有别于Linux的进程管理策略,有别于Linux的在进程活动停止后就结束该进程,Android把这些进程都保留在内存中,直到系统需要更多 内存为止。这些保留在内存中的进程通常...
  • robertcpp
  • robertcpp
  • 2016年06月30日 13:53
  • 4311
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android进程学习
举报原因:
原因补充:

(最多只允许输入30个字)