1. Android Application Thread 基础

来源:互联网 发布:如何用js实现下拉菜单 编辑:程序博客网 时间:2024/06/06 20:11

Android Application Thread

UI Thread

UI Thread是应用中的主线程,被用于执行Android Component和更新屏幕上的UI。
UI Thread是一个顺序的事件处理线程,它能执行来自平台其他线程发送来的事件。

Binder Thread

Binder Thread被用于不同进程中的线程通信。

Background Thread

应用中显式创建的所有线程都是Background Thread。Background Thread使用UI Thread的后代,因此它们继承了UI Thread的特性。

注:
Stack(栈):存储基本类型和对象的引用;
Heap(堆):存储对象实例。

查看应用进程的信息:
UID:User ID
PID:Process identifier
PPID:Parent process identifier
这里写图片描述


Android主要有两种方式影响Thread的调度
* Priority(优先级)
改变Linux Thread Priority
* Control Group(控制组)
改变Android特有的control group


设置线程的Priority(优先级)

java.lang.Thread

setPriority(int priority); // 这个方法是平台无关的

基于Java的优先级来设置一个新的优先级值。0(最低优先级) ~ 10(最高优先级)

android.os.Process

Process.setThreadPriority(int priority); // Calling ThreadProcess.setThreadPriority(int threadId, int priority); // Thread with specific id

使用Linux的优先级规则来设置一个新的值。-20(最高) ~ 19(最低)

两种之间的对应关系

这里写图片描述

Control Group(控制组)

Android中定义了多个控制组,其中应用最重要的是Foreground Group和Background Group。
在Foreground Group中的线程会比Background Group中线程分配到更多的执行时间。
这里写图片描述

使用命令查看:
Foreground Group
这里写图片描述
Background Group
这里写图片描述

把线程设置为Background Group
被Application创建的Thread默认和UI Thread有相同的Priority和Control Group,因此它们会和UI Thread强占资源。
我们可以设置为Background Thread的优先级,来防止这种情况的出现。
使用下面的方法来设置

Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
原创粉丝点击