如果我有像这样的代码:
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.Process way required/首选?
如果是,为什么是android.os.Process方式的首选/必需?
据我所知,这并没有明确的文档记录。
发布于 2011-04-15 18:33:24
当前的Dalvik实现似乎将Java线程逐个映射到底层linux系统PTHREADs,就像您所说的那样。所有应用程序的所有线程都属于系统上的同一线程组,因此每个线程都会与所有应用程序的所有线程竞争。
因此,目前Thread.setPriority
实际上应该做与Process.setThreadPriority
相同的事情,使用较小的Java优先级。优先级的映射在vm/Thread.c的kNiceValues
中定义
发布于 2014-08-11 13:22:50
谷歌使用
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
在Volley的Network Dispatcher线程中,所以我相信使用Process.setThreadPriority()是可行的。
发布于 2011-04-15 09:08:50
我会依赖于thread.setPriority()
。android.os.Process.setThreadPriority
指定了底层linux OS的实际线程优先级。但是,这些线程可以,但不需要映射到Dalvik / Java VM线程,因为VM可以使用自己的方式进行线程处理,也可以使用系统线程或两者的组合。如果不受android安全限制的限制,提高系统优先级更有可能导致您的应用程序优先于其他应用程序,但不能保证将当前的Java线程优先于应用程序中的其他Java线程。
https://stackoverflow.com/questions/5198518
复制相似问题