2012-01-26 21 views
12

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ドキュメントを読んでいますが、android.os.Process.getThreadPriority()Thread.currentThread().getPriority()の違いを説明する問題は出ませんでした。これらのメソッドが異なる値を返す理由

P.P.S. Thread.currentThread().setPriority()は問題なく動作します。

答えて

11

あなたのチェックに間違ったThreadIDを使用しています。

正しいIDを取得するには、android.os.Process.myTid()を使用する必要があります。

固定コード:

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 

さらに参考:

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

関連する問題