1. ホーム

[解決済み】メインスレッドで他のスレッドからコードを実行する

2022-03-25 01:41:13

質問

アンドロイドのサービスにおいて、私はいくつかのバックグラウンドタスクを行うためにスレッドを作成しました。

あるスレッドが、メインスレッドのメッセージキューにあるタスクをポストする必要がある状況があります。 Runnable .

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

解決方法は?

注:この回答は非常に多くの注目を集めたので、更新する必要があります。オリジナルの回答が投稿されて以来、@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);

2. バックグラウンドスレッドに Context オブジェクト

(@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);