Android Viewについてpost(Runnable)の使用

1662 ワード

以前は:view.post(runnable)はrunnableのrunメソッドをスレッドで実行できるので、runメソッドで時間のかかる操作をして冗談を言いました.
資料を調べてみると、Runnableは必ずしも新しいスレッドを開くわけではありません.例えば、次の呼び出し方法はUIマスタースレッドで実行されます.
     Handler mHandler=new Handler(); 
     mHandler.post(new Runnable(){ 
        @Override public void run() 
        { // TODO Auto-generated method stub 
         } 
     });

         ,      :“The runnable will be run on the user interface thread. ”
boolean android.view.View .post(Runnable action) Causes the Runnable to be added to the message queue. The runnable will be run on the user interface thread(UI  ).
Parameters:
action:
 The Runnable that will be executed.
Returns:
 Returns true if the Runnable was successfully placed in to the message queue. Returns false on failure, usually because the looper processing the message queue is exiting.

handlerのpostメソッドを呼び出すことで、Runnableオブジェクト(一般的にRunnableのサブクラス)を渡すことができます.handlerはlooperでこのRunnableのRunメソッドを呼び出して実行します.
Runnableはインタフェースであり、スレッドではなく、一般的なスレッドはRunnableを実現します.したがって、匿名の内部クラスがUIプライマリスレッドで実行されている場合、このRunnableインタフェースを実装するスレッドクラスを使用する場合、対応するスレッドで実行されます.
具体的には、この関数の動作原理は次のとおりです.
View.Post(Runnable)メソッド.post(Runnable action)メソッドでは、Viewは現在のスレッド(すなわちUIスレッド)のHandlerを取得し、actionオブジェクトをHandlerにpostする.Handlerでは、渡されたactionオブジェクトをMessage(Messageのcallbackはaction)にパッケージし、UIスレッドのメッセージループに投入します.HandlerがこのMessageを再処理すると、runnableのrunメソッドを直接呼び出すように設定されたブランチ(説明されていないもの)があります.この場合、UIスレッドにルーティングされているので、UIを更新する心配はありません.
前に見たコードは、MessageのcallbackがRunnableの匿名の内部クラスです.この場合,新しいスレッドでは使用されないため,複雑な計算論理をしてはいけない.