2012-01-26 14 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() का कोई प्रभाव नहीं है?

पीएस मैंने थ्रेड के बारे में Google डॉक्स पढ़े, लेकिन android.os.Process.getThreadPriority() और Thread.currentThread().getPriority() के बीच अंतर समझाते हुए मुझे कोई समस्या नहीं आई। ये विधियां अलग-अलग मान क्यों लौटती हैं?

पी.पी.एस. Thread.currentThread().setPriority() ठीक काम करता है।

उत्तर

11

आप अपनी जांच के लिए गलत थ्रेड आईडी का उपयोग कर रहे हैं।

सही आईडी प्राप्त करने के लिए आपको 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()

संबंधित मुद्दे