和 android.os.Process.setThreadPriorder()之间的区别是什么

如果我有这样的代码:

Runnable r = ...;


Thread  thread = new Thread(r);
thread.setPriority((Thread.MAX_PRIORITY + Thread.NORM_PRIORITY) / 2);

或者..。

    Runnable r = ...
Thread thread = new Thread( new Runnable() {
public void run() {
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_MORE_FAVORABLE);
r.run();
}
});

是否 android.os。需要/首选的处理方式?

为什么 是 android. os。过程方式的首选/需要,如果它是?

据我所知,这并没有明确的记录。

39883 次浏览

我会依靠 thread.setPriority()android.os.Process.setThreadPriority命名底层 linux 操作系统的一个实际线程优先级。然而,这些可以,但不需要映射到 Dalvik/Java 虚拟机线程,因为虚拟机可以自己完成线程,或者使用系统线程,或者两者兼而有之。如果不受 android 安全约束的限制,提高系统优先级可能会导致优先考虑您的应用程序,而优先考虑其他应用程序,但不能保证优先考虑当前 Java 线程,而优先考虑应用程序中的其他 Java 线程。

当前的 Dalvik 实现似乎像您所说的那样,将 Java 线程一个接一个地映射到底层的 Linux 系统 PTHREAD。所有应用程序的所有线程都属于系统上的同一个线程组,因此每个线程都与所有应用程序的所有线程竞争。

因此,目前 Thread.setPriority实际上应该做与 Process.setThreadPriority相同的事情,使用较小的 Java 优先级规模。优先级的映射在 Vm/Thread.ckNiceValues中定义

谷歌使用

Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);

在 Volley 的 网络调度员线程中,所以我相信使用 Process.setThreadPriory()是正确的方法。