Commit ddd11e24 authored by Jacksgong's avatar Jacksgong

feat(post-update): perfect the detail of process levels for android-thread-process-components-post

parent 8f52b539
......@@ -59,16 +59,47 @@ Dalvik虚拟机
1. 系统内存不足时
2. 根据**进程中**运行的组件**类别**、组件的**状态** => 判断重要性,排序优先级
#### 进程重要性级别
### 进程重要性级别
1. 前台进程: 正在使用的进程
2. 可见进程: 屏幕上有显示,当不是正在使用
3. 服务进程: 运行Service的进程(只要**前台进程****可见进程**有足够内存,系统就不会回收)
4. 后台进程: 运行着不可见Activity(并回调过`onStop()`(一般按了Back或Home键至少会执行到`onStop()`)的进程(**前三种**优先级进程需要内存,会回收)
5. 空进程: 未运行任何程序组件
> 当A进程依赖(绑定)B进程的时候,那么系统会判定: B进程的进程重要性级别 至少会等于 A进程的重要性级别
> **优点:** 下次启动该应用程序时会更快速(因为资源可能没有被回收)
> **缺点:** 可能资源被回收,而启动时资源不够,需要等待系统回收其他资源
#### 1. 前台进程:
> 正在使用的进程,满足以下任意一个条件的进程
- 持有一个用户正在交互的`Activity`(`Activity#onResume()`方法已经被调用)
- 持有一个`Service`绑定了用户正在交互的`Activity`
- 持有一个`Service`正在运行在前台模式下(通过`Service#startForeground()`开始前台模式)
- 持有一个`Service`正在执行它任意的生命周期回调(`onCreate()``onStart()``onDestroy()`)
- 持有一个`BroadcastReceiver`正在执行它的`onReceive()`方法
#### 2. 可见进程:
> 屏幕上有显示,当不是正在使用,满足以下任意一个条件的进程
- 持有一个`Activity`不在前台(`Activity#onPause()`已经被调用),但是用户依然能够看到。(如另外一个程序启动了一个Dialog,此时上一个应用的`Activity`用户还能被用户看到,因此上一个应用就是可见进程)
- 持有一个`Service`绑定了一个可见`Activity`
#### 3. 服务进程:
> 运行Service的进程(只要**前台进程**和**可见进程**有足够内存,系统就不会回收)
不属于`前台进程`,以及`可见进程`的,持有一个正在运行的`Service`的进程。
#### 4. 后台进程:
运行着不可见Activity(回调过`onStop()`(一般按了Back或Home键至少会执行到`onStop()`)的进程, 会存储在一个LRU队列中,在前三种优先级进程需要内存时,就会对最近最少使用的进程进行回收。
> 由于服务进程的优先级高于后台进程,因此很多后台事件可以优先考虑放到服务中处理,避免被回收。
#### 5. 空进程:
未运行任何程序组件的进程,通常这种进程缓存,只是为了加速下次组件启动时不用重复启动进程。
---
- [Processes and Threads](https://developer.android.com/guide/components/processes-and-threads.html)
---
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment