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 Thread
Process.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);