2012-01-06 4 views
1

この質問はおそらくJavaスレッドの一般的な世界に適用される...Android Looperスレッドで処理能力が使用されていますか?

私は(これはrun方法である)私はそうのように使うのスレッドを持っている:

Looper.prepare(); 

Handler rHandler = new Handler(){ 
    @Override 
    public void handleMessage(Message msg) { 
     //ommited... 
    } 
}; 

Looper.loop(); 

私の質問はスレッドがハンドラにプッシュされるのを待っている間にスレッドがCPUを使用しているかどうかそれとも、本当に「眠っている」のですか?

このようなスレッドをいくつか使用すると、システムが停止することがありますか?

答えて

3

ルーパは、ネイティブコードのLooperオブジェクト(C++で書かれている)用のJavaレイヤーのファサードです。ネイティブコードルーパーは、スケーラビリティのために構築されたI/Oイベント通知メカニズムであるLinuxシステムコール "epoll"を利用しています。これは、loop()内でLooperがハングアウトしていて、キューにメッセージがない場合、実際に何も実行されていないため、処理能力を使用しないことを意味します。メッセージがその上のメッセージ待ち行列に掲示されると、スレッドは「目を覚まし」、メッセージを処理します。

あなたがコードに興味がある場合は、以下を参照してください。

AOSP_ROOT/frameworks/native/libs/utils/Looper.cpp 
AOSP_ROOT/frameworks/base/core/java/android/os/Looper.java 
AOSP_ROOT/frameworks/base/core/java/android/os/MessageQueue.java 
AOSP_ROOT/frameworks/base/core/jni/android_os_MessageQueue.cpp 
AOSP_ROOT/frameworks/base/native/android/looper.cpp 
0

スレッドがメッセージを待っているとき、実行準備ができていません。実行準備が整っていないスレッドはCPUを使用できません。

関連する問題