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()
使用してください。AsyncTask
onPostExecute()