2012-01-26 29 views
12

'un android.os.Process.setThreadPriority() kullanarak ana iş parçacığının önceliğini değiştirmeye çalışıyorum. Burada kodu öncesi ve öncelik değişen sonrasında günlük mesajları var:İş parçacığı önceliğinin değiştirilmesi

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

Ve şu çıktıyı alıyorum: O öncelik değişmedi anlamına

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

, ben değerlendirmek için kullandığımız herhangi bir yöntemi o. android.os.Process.THREAD_PRIORITY_DISPLAY = -4, bu nedenle, çıkışımı değiştirdikten sonra -4 eşit olmalı, neden aynı kalıyor? Neden android.os.Process.setThreadPriority()'un bir etkisi yok?

P.S. Konuyla ilgili Google dokümanlarını okudum, ancak android.os.Process.getThreadPriority() ve Thread.currentThread().getPriority() arasındaki farkı açıklayan herhangi bir sorunla karşılaşmadım. Bu yöntemler neden farklı değerler döndürüyor?

P.P.S. Thread.currentThread().setPriority() iyi çalışıyor.

cevap

11

Çekiniz için yanlış ThreadID kullanıyorsunuz.

Doğru kimliği bulmak için android.os.Process.myTid();

Sabit kod:

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

Giriş çıkışı:

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

daha fazla referans için:

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