Question

Je suis en train de changer la priorité d'un thread principal à l'aide de android.os.Process.setThreadPriority().J'ai des messages de journal avant et après changement de priorité, voici le code:

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

Et j'obtiens le résultat suivant:

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

Cela signifie que la priorité n'a pas changé, quelle que soit la méthode que j'utilise pour l'évaluer.android.os.Process.THREAD_PRIORITY_DISPLAY = -4, donc après mon changement de sortie doit être égale à -4, pourquoi c'est toujours la même?Pourquoi android.os.Process.setThreadPriority() n'a aucun effet?

P. S.J'ai lu google docs sur les threads, mais je n'ai pas rencontré tous les problèmes en expliquant la différence entre android.os.Process.getThreadPriority() et Thread.currentThread().getPriority().Pourquoi ces méthodes retournent des valeurs différentes?

P. P. S. Thread.currentThread().setPriority() fonctionne très bien.

Était-ce utile?

La solution

Vous utilisez le mauvais ThreadID de votre chèque.

Pour obtenir l'id correct, vous devez utiliser android.os.Processus.myTid();

Code fixe:

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

La sortie du journal:

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

À titre de référence:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top