1. ホーム
  2. android

[解決済み] Androidの基本:UIスレッドでコードを実行する

2022-03-21 20:21:24

質問

UIスレッドでコードを実行するという観点で、以下のような違いはありますか?

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");
    }
}

解決方法は?

どれも正確に同じではありませんが、同じ正味の効果をもたらします。

との違いは、もし、あなたがたまたま を実行するとき、メインアプリケーションスレッドでは、最初のもの( runOnUiThread() ) が実行されます。 Runnable をすぐに実行します。2つ目のもの( post() ) は常に Runnable をイベントキューの末尾に追加します。

3つ目は、インスタンスを作成して実行したと仮定すると BackgroundTask を実行するために、スレッドプールからスレッドを取得して、多くの時間を浪費することになります。 doInBackground() を実行する前に、最終的に post() . これは、3つの方法のうち、圧倒的に効率が悪いです。使用方法 AsyncTask を使うためだけでなく、バックグラウンドのスレッドで実際に作業をする場合。 onPostExecute() .