改变线程优先级不具有效果 [英] Changing thread priority doesn't have an effect

查看:176
本文介绍了改变线程优先级不具有效果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图用改变主线程的优先级 android.os.Process.setThreadPriority()。我之前和优先级变化之后的日志信息,这里是code:

I'm trying to change priority of main thread using android.os.Process.setThreadPriority(). I have log messages before and after priority changing, here is code:

public class TestActivity extends Activity {
    public final String TAG="TestActivity";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        int tid=(int)Thread.currentThread().getId();
        Log.d(TAG,"priority before change = " + android.os.Process.getThreadPriority(tid));
        Log.d(TAG,"priority before change = "+Thread.currentThread().getPriority());
        android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_DISPLAY);
        Log.d(TAG,"priority after change = " + android.os.Process.getThreadPriority(tid));
        Log.d(TAG,"priority after change = " + Thread.currentThread().getPriority());
    }
}

和我得到了以下的输出:

And I get the following output:

priority before change (getThreadPriority) = 0
priority before change (currentThread().getPriority) = 5
priority after change (getThreadPriority) = 0
priority after change (currentThread().getPriority) = 5

这意味着优先级并没有改变,任何方法我用它来评价它。 android.os.Process.THREAD_PRIORITY_DISPLAY = -4 ,所以改变了我的输出中应等于-4,为什么它仍然是相同的后?为什么 android.os.Process.setThreadPriority()有没有影响?

It means that priority didn't change, whatever method I use to evaluate it. android.os.Process.THREAD_PRIORITY_DISPLAY = -4, so after changing my ouput should equal -4, why it remains the same? Why android.os.Process.setThreadPriority() has no effect?

P.S。我读了谷歌文档有关线程,但我没碰到过解释之间的 android.os.Process.getThreadPriority()主题差异的任何问题。 currentThread()。getPriority()。为什么这些方法返回不同的值?

P.S. I read google docs about threads, but I didn't come across any issues explaining difference between android.os.Process.getThreadPriority() and Thread.currentThread().getPriority(). Why these methods return different values?

P.P.S。 Thread.currentThread()。setPriority()工作正常。

P.P.S. Thread.currentThread().setPriority() works fine.

推荐答案

您使用了错误的ThreadID为您检查。

You are using the wrong ThreadID for your check.

要获得正确的ID,你必须使用android.os.Process.myTid();

To get the correct id you have to use android.os.Process.myTid();

固定code:

package mypackage.test;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class TestActivity extends Activity {
    public final String TAG="TestActivity";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        int tid=android.os.Process.myTid();

        Log.d(TAG,"priority before change = " + android.os.Process.getThreadPriority(tid));
        Log.d(TAG,"priority before change = "+Thread.currentThread().getPriority());
        android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_DISPLAY);
        Log.d(TAG,"priority after change = " + android.os.Process.getThreadPriority(tid));
        Log.d(TAG,"priority after change = " + Thread.currentThread().getPriority());
    }
}

日志输出:

priority before change = 0
priority before change = 5
priority after change = -4
priority after change = 5

有关进一步的参考:

<一个href="http://developer.android.com/reference/android/os/Process.html#myTid">http://developer.android.com/reference/android/os/Process.html#myTid()

这篇关于改变线程优先级不具有效果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆