2012-01-26 30 views
12

Tôi đang cố thay đổi mức độ ưu tiên của chuỗi chính bằng cách sử dụng android.os.Process.setThreadPriority(). Tôi có thông điệp đăng nhập trước và sau khi thay đổi ưu tiên, đây là mã:Thay đổi mức ưu tiên của chuỗi không có hiệu lực

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

Và tôi nhận được kết quả như sau:

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

Nó có nghĩa là ưu tiên mà không thay đổi, bất kể phương pháp tôi sử dụng để đánh giá nó. android.os.Process.THREAD_PRIORITY_DISPLAY = -4, vì vậy sau khi thay đổi lưu lượng của tôi phải bằng -4, tại sao nó vẫn giữ nguyên? Tại sao android.os.Process.setThreadPriority() không có hiệu lực?

P.S. Tôi đọc tài liệu google về chủ đề, nhưng tôi đã không gặp bất kỳ vấn đề nào giải thích sự khác biệt giữa android.os.Process.getThreadPriority()Thread.currentThread().getPriority(). Tại sao các phương thức này trả về các giá trị khác nhau?

P.P.S. Thread.currentThread().setPriority() hoạt động tốt.

Trả lời

11

Bạn đang sử dụng sai ThreadID cho séc của mình.

Để có id chính xác, bạn phải sử dụng android.os.Process.myTid();

Sửa 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 đầu ra:

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

Để tham khảo thêm:

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

Các vấn đề liên quan