2013-06-16 6 views
14

ハンドラが実行可能ファイルを投稿する理由を説明できますか? handleMessageをオーバーライドしてメッセージを送信するのは同じことですか?Android:なぜハンドラは実行可能ファイルを投稿するのですか?

私はこれらの2つの方法がどのように実装されると思うかを示すために、いくつかのテストされていないコードを書いています。私のアプローチで間違っている場合は、私を修正してください。

ポストとのハンドラ:のhandleMessageと

handler.post(new Runnable() { 
    @Override 
    public void run() { 
     imageView.doSomething(); 
    } 
}); 

ハンドラ:

final Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message message) { 
     imageView.doSomething(); 
    } 
}; 

handler.sendMessage(message); 

答えて

11

どちらのコードスニペットは、あなたがいくつかのコードを実行したい場合、従来あなたはHandler.postRunnableを使用し、同じように機能UIスレッドハンドラーオブジェクトについて何も知らずに。多くの場合、UIスレッドで任意のコードを実行する必要があります。

しかし、あなたはUIスレッドに送信され、特定の機能を持っているものを整理したいいくつかのケースで

はあなたがのsendMessageを使用することができる方法を実行したいです。

どちらか一方を使用するとパフォーマンスが低下するとは思われません。あなたに合っていると思うものを使用することは、あなた次第です。

+0

さて、新しいオブジェクト(実行可能ファイル)を作成するためのパフォーマンスは非常に低いです。しかしそれはごくわずかです。 – eordano

+2

ただし、UIスレッドでコードを実行する場合は、UIスレッドでハンドラを作成するか、または「新しいハンドラ(Looper.getMainLooper())」を使用する必要があります。 "new Handler()"では、現在のスレッドでハンドラを作成しますが、これはメインスレッドである必要はありません。 – Kuno

関連する問題