Android线程进程.setThreadPriority 公共类MainActivity扩展活动{ 私有整数计数; 私人帐户; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 线程t=新线程(){ @凌驾 公开募捐{ //Process.setThreadPriority(Process.THREAD\u PRIORITY\u后台); while(true){ newThreadCount++; } } }; t、 start(); 而(uiCount

Android线程进程.setThreadPriority 公共类MainActivity扩展活动{ 私有整数计数; 私人帐户; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 线程t=新线程(){ @凌驾 公开募捐{ //Process.setThreadPriority(Process.THREAD\u PRIORITY\u后台); while(true){ newThreadCount++; } } }; t、 start(); 而(uiCount,android,multithreading,cgroups,Android,Multithreading,Cgroups,我知道 Process.setThreadPriority(Process.THREAD\u PRIORITY\u后台) 让线程t在非交互式组中运行 运行上面的代码,Log print uiCount=100000000,newThreadCount=50000000(大约) 删除Process.setThreadPriority(Process.THREAD\u PRIORITY\u BACKGROUND)然后 再次运行代码,日志打印几乎相同 那么Process.setThreadPriori

我知道 Process.setThreadPriority(Process.THREAD\u PRIORITY\u后台)

让线程t在非交互式组中运行

  • 运行上面的代码,Log print uiCount=100000000,newThreadCount=50000000(大约)
  • 删除Process.setThreadPriority(Process.THREAD\u PRIORITY\u BACKGROUND)然后 再次运行代码,日志打印几乎相同

  • 那么Process.setThreadPriority(Process.THREAD\u PRIORITY\u BACKGROUND)的功能是什么呢?

    Android API已经为工作线程分配了后台优先级(例如,请参阅HandlerThread和AsyncTask的源代码)

    但是,重要的是要记住,情况并非总是如此。例如,在主UI线程上实例化的线程和ExecutorServices将继承默认的前台优先级,这使得延迟更可能发生,并可能损害应用程序的性能。在这些情况下,您应该始终记住设置线程通过在线程运行之前调用Process.setThreadPriority(Process.THREAD\u priority\u BACKGROUND)来设置的优先级。这样做很简单,如下例所示:

    public class MainActivity extends Activity {
    
    private int newThreadCount;
    private int uiCount;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Thread t = new Thread() {
            @Override
            public void run() {
                //Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
                while (true) {
                    newThreadCount++;
                }
            }
        };
        t.start();
        while (uiCount < 100000000) {
            uiCount++;
        }
        Log.d("TEST", "uiCount=" + uiCount + " newThreadCount=" + newThreadCount);
    }
    

    你到底在问什么?文档没有回答你的问题吗?Thread是Process.setThreadPriority(Process.Thread\u PRIORITY\u BACKGROUND)还是Process.setThreadPriority(Process.Thread\u PRIORITY\u FORCEGROUND)效果线程占用CPU时间?请将进一步的更新发布到您的主要帖子中,不要将其保留在评论中。
    new Thread(new Runnable() {
      @Override
      public void run() {
        Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
    
        // ...
      }
    }).start();