category: Android
DATE : 2011/05/08 (Sun)
DATE : 2011/05/08 (Sun)
Androidには、以下の2つの方法でスレッドの優先度を変更できます。
両者に違いはあるのでしょうか。気になったので調べてみました。結論としては、両者の動作に違いはありません。
android.os.Process.setThreadPriority()は、android.os.Processに定義されているANDROID_PRIORITY_*定数をnice値としてsetpriorityシステムコールを呼び出します。処理の流れは以下の通りです。
- android.os.Process.setThreadPriority()はネイティブメソッドで、frameworks/base/core/jni/android_util_Process.cppのandroid_os_Process_setThreadPriority関数が実行されます。
- android_os_Process_setThreadPriority関数がframeworks/base/libs/utils/Threads.cppのandroidSetThreadPriority関数を呼び出します。
- androidSetThreadPriority関数は、android.os.Processに定義されているANDROID_PRIORITY_*定数をnice値としてsetpriorityシステムコールを呼び出します。
java.lang.Thread.setPriority()は、java.lang.Threadに定義されているスレッド優先度をnice値に変換してsetpriorityシステムコールを呼び出します。処理の流れは以下の通りです。
- java.lang.Thread.setPriority()がjava.lang.VMThraed.setPriority()を呼び出します。
- java.lang.VMThraed.setPriority()はネイティブメソッドで、libcore/vm/native/java_lang_VMThread.cのDalvik_java_lang_VMThread_setPriority関数が実行されます。
- Dalvik_java_lang_VMThread_setPriority関数は、dalvik/vm/Thread.cのdvmChangeThreadPriority関数を呼び出します。
- dvmChangeThreadPriority関数は、java.lang.Threadで定義されているスレッド優先度をnice値に変換してsetpriorityシステムコールを呼び出します。
結果、両者の効果は同じです。ただし、android.os.Processではスレッドの優先度が用途ごとに定数として定義されているため、まずandroid.os.Process.setThreadPriority()の使用を検討すべきでしょう。
PR
●この記事にコメントする
忍者ブログ [PR]