Thread.setPriority()和android.os.Process.setThreadPriority()之间有什么区别

如果我有这样的代码:

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的方式必需/首选?

为什么 android.os.Process方式是首选/必需的?

据我所知,这没有清楚的logging。

目前的Dalvik实现似乎将Java Threads ony按照您的说法映射到底层的linux系统PTHREADs。 所有应用程序的所有线程都属于系统中相同的线程组,因此每个线程都与所有应用程序的所有线程竞争。

所以现在Thread.setPriority实际上应该和Process.setThreadPriority ,使用较小的Java优先级,优先级的映射在vm / Thread.c的 kNiceValues中定义

Google使用

 Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); 

在Volley的networking调度程序线程中,所以我相信使用Process.setThreadPriority()是最好的select。

我会依靠thread.setPriority()android.os.Process.setThreadPriority命名了底层linux操作系统的真实线程优先级。 但是,这些可以但不需要映射到Dalvik / Java VM线程,因为VM可以自己的方式进行线程化,或者使用系统线程或两者的组合。 如果不受android安全限制的约束,提高系统优先级将更有可能导致优先考虑你的应用程序,而不是保证优先于你的应用程序中的其他Java线程。