メインスレッドで別のスレッドからコードを実行する 質問する

メインスレッドで別のスレッドからコードを実行する 質問する

Android サービスで、バックグラウンド タスクを実行するためのスレッドを作成しました。

スレッドが特定のタスクをメイン スレッドのメッセージ キューに投稿する必要がある状況があります。たとえば、 ですRunnable

Handlerメインスレッドの を取得し、他のスレッドからそれにMessage/を投稿する方法はありますか?Runnable

ベストアンサー1

注: この回答は非常に注目を集めたため、更新する必要があります。元の回答が投稿されて以来、@dzeikei からのコメントは元の回答とほぼ同じくらいの注目を集めています。そこで、考えられる解決策を 2 つ示します。

1. バックグラウンド スレッドにオブジェクトへの参照がある場合Context:

バックグラウンド ワーカー スレッドが Context オブジェクト (アプリケーション コンテキストまたはサービス コンテキスト) にアクセスできることを確認します。次に、バックグラウンド ワーカー スレッドで次の操作を実行します。

// Get a handler that can be used to post to the main thread
Handler mainHandler = new Handler(context.getMainLooper());

Runnable myRunnable = new Runnable() {
    @Override 
    public void run() {....} // This is your code
};
mainHandler.post(myRunnable);

Context2. バックグラウンドスレッドにオブジェクトがない場合(または必要ない場合)

(@dzeikei による提案):

// Get a handler that can be used to post to the main thread
Handler mainHandler = new Handler(Looper.getMainLooper());

Runnable myRunnable = new Runnable() {
    @Override 
    public void run() {....} // This is your code
};
mainHandler.post(myRunnable);

おすすめ記事