Android の基本: UI スレッドでコードを実行する 質問する

Android の基本: UI スレッドでコードを実行する 質問する

UI スレッドでコードを実行するという観点から、次の 2 つには違いがありますか。

MainActivity.this.runOnUiThread(new Runnable() {
    public void run() {
        Log.d("UI thread", "I am the UI thread");
    }
});

または

MainActivity.this.myView.post(new Runnable() {
    public void run() {
        Log.d("UI thread", "I am the UI thread");
    }
});

そして

private class BackgroundTask extends AsyncTask<String, Void, Bitmap> {
    protected void onPostExecute(Bitmap result) {
        Log.d("UI thread", "I am the UI thread");
    }
}

ベストアンサー1

これらはどれもまったく同じではありませんが、最終的な効果はすべて同じになります。

最初のものと 2 番目のものの違いは、コードの実行時にメイン アプリケーション スレッド上にいる場合、最初のもの ( runOnUiThread()) は を直ちに実行する点ですRunnable。2 番目のもの ( post()) は、メイン アプリケーション スレッド上にいる場合でも、常に をRunnableイベント キューの最後尾に配置します。

3 番目は、 のインスタンスを作成して実行すると仮定するとBackgroundTask、デフォルトの no-op を実行するためにスレッド プールからスレッドを取得するのに多くの時間を費やしdoInBackground()、最終的に に相当する処理を実行します。これは、3 つの中で最も効率が悪いです。を使用するためだけでなく、バ​​ックグラウンド スレッドで実際に作業を行う場合は をpost()使用してください。AsyncTaskonPostExecute()

おすすめ記事