如果我的代码如下:
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();
}
});
IS android.os.Process方式需要/首选吗?
为什么是首选/必需的android.os.Process方式?
据我所知,目前尚未明确记录。
答案 0 :(得分:33)
当前的Dalvik实现似乎将Java Threads ony映射到底层的Linux系统PTHREAD,就像你说的那样。所有应用程序的所有线程都属于系统上的同一个线程组,因此每个线程都与所有应用程序的所有线程竞争。
因此,目前Thread.setPriority
应该与Process.setThreadPriority
实际相同,使用较小的Java优先级比例,优先级的映射在kNiceValues
vm/Thread.c
答案 1 :(得分:6)
Google使用
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
在Volley的Network Dispatcher主题中,所以我相信使用Process.setThreadPriority()是可行的方法。
答案 2 :(得分:1)
我会依赖thread.setPriority()
。 android.os.Process.setThreadPriority
命名了底层Linux操作系统的真正线程优先级。但是,这些可以,但不需要映射到Dalvik / Java VM线程,因为VM可以通过自己的方式进行线程化或使用系统线程或两者的组合。提高系统优先级更有可能导致应用程序优先于其他应用程序(如果不受安全性约束限制),但不保证优先使用当前Java Thread支持应用程序中的其他Java Threads。