Изменение приоритета потока не имеет эффекта

StackOverflow https://stackoverflow.com/questions/9019137

  •  14-11-2019
  •  | 
  •  

Вопрос

Я пытаюсь изменить приоритет основного потока, используя android.os.Process.setThreadPriority().У меня есть сообщения журнала до и после изменения приоритета, вот код:

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());
    }
}
.

и я получаю следующий вывод:

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() не имеет эффекта?

P.S.Я прочитал Google Docs о потоках, но я не сталкивался с любыми вопросами, объясняющими разницу между android.os.Process.getThreadPriority() и Thread.currentThread().getPriority().Почему эти методы возвращают разные значения?

p.p.s.Thread.currentThread().setPriority() работает нормально.

Это было полезно?

Решение

You are using the wrong ThreadID for your check.

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

Fixed 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());
    }
}

Log output:

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

For further reference:

http://developer.android.com/reference/android/os/Process.html#myTid()

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top