2011-11-30 20 views
29

このコードは、私がスレッドでそれを使用しようとすると、例外を「指定されたスレッドが存在しない」がスローされます。また、これはデバッガに表示されたスレッドIDと一致しないことに気付きました。このAPIを使用するには、Android固有のスレッドIDを取得するにはどうすればよいですか?AndroidスレッドIDを取得するには?</p> <pre><code>android.os.Process.getThreadPriority((int) Thread.currentThread().getId())); </code></pre> <p>同上私は、JavaクラスのスレッドIDを使用して、Process.setThreadPriorityを使用しようとした場合:

+2

あなたは 'Process.myTid()'あなたのための任意の使用であるかどうかをチェックしましたか? – harism

答えて

50
android.os.Process.getThreadPriority(android.os.Process.myTid()); 
さらに参考のために

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

+0

ありがとう、これは間違いなく現在のスレッドのスレッドIDを取得します。 – Hieronymus

+0

+1私はあなたに謝るべきです(そして、この答えはもちろん正しいです)。 – samosaris

+0

FWIW android.os.Process.getThreadPriority(android.os.Process.myTid()); –

9

我々は、スレッドで作業している間。スレッド関連の問題を解決するためにスレッドの詳細を記録したい以下のように1つのUtilsクラスを作成し、それを使ってスレッドの署名を記録します。

public class Utils 
{ 
    public static long getThreadId() 
    { 
     Thread t = Thread.currentThread(); 
     return t.getId(); 
    } 

    public static String getThreadSignature() 
    { 
     Thread t = Thread.currentThread(); 
     long l = t.getId(); 
     String name = t.getName(); 
     long p = t.getPriority(); 
     String gname = t.getThreadGroup().getName(); 
     return (name 
      + ":(id)" + l 
      + ":(priority)" + p 
      + ":(group)" + gname); 
    } 

    public static void logThreadSignature() 
    { 
     Log.d("ThreadUtils", getThreadSignature()); 
    } 

    public static void sleepForInSecs(int secs) 
    { 
     try 
     { 
     Thread.sleep(secs * 1000); 
     } 
     catch(InterruptedException x) 
     { 
     throw new RuntimeException("interrupted",x); 
     } 
    } 

参考:www.androidbook.com

関連する問題

 関連する問題