アクティビティがフォアグラウンドにないときにアクティビティを更新しても問題ありませんか。バックグラウンドスレッドから実行できるかどうかは尋ねていません。
このことを考慮:
Activity-A と Activity-B の 2 つのアクティビティがあります。
アクティビティ A から AsyncTask を開始し、アクティビティ B に移動します。しばらくすると、AsyncTask が終了し、onPostExecute() メソッドで、Activity-A にある画像を更新しようとします。これはすべて、Activity-B がフォアグラウンドにあるときに発生しています。
上記のシナリオは合理的ですか、それとも Activity-A がフォアグラウンドで UI を更新するまで待つ必要がありますか?
上記のシナリオで UI を安全に更新できる場合、Activity-A が強制終了または終了し、AsyncTask がまだ完了して UI を更新しようとした場合、どうすればよいですか? [UI を更新する前に isFinishing をチェックする必要があると仮定]
上記は、私がやろうとしていることの簡略化されたバージョンです。私は実際にサーバーから画像をロードし、リクエストが完了するとそれ自体を更新するカスタム ImageView を持っています。したがって、アクティビティがフォアグラウンドにないか、終了/破棄されたときにビューが更新されている場合、どのシナリオを心配する必要があるのか 疑問に思っています。
編集:これは機能しているサンプルです。
public class MainActivity extends Activity implements OnClickListener {
ImageView mImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView = (ImageView) findViewById(R.id.iv_image);
findViewById(R.id.btn_activity_2).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_activity_2:
new BackGroundTask().execute();
startActivity(new Intent(MainActivity.this, Activity2.class));
break;
}
}
private class BackGroundTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
mImageView.setImageResource(R.drawable.ic_launcher);
}
}
}
レイアウトは、ボタンと画像を含む LinearLayout です。