私とほぼ同じ質問をいくつか見ましたが、私の疑問をすべて満たす完全な答えを見つけることができませんでした。それで、ここにいます。次のAsyncTask
ようなクラスを拡張する内部クラスのアクティビティがあるとします。
public class MyActivity extends Activity {
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
protected Bitmap doInBackground(String... urls) {
return DownloadImage(urls[0]);
}
protected void onPostExecute(Bitmap result) {
ImageView img = (ImageView) findViewById(R.id.img);
img.setImageBitmap(result);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new DownloadImageTask().execute("http://mysite.com/image.png")
}
}
がバックグラウンドで実行されている間にアクティビティが一時停止または破棄されたと仮定します(2つのケースは異なる場合があります) DownloadImageTask
。次に、DownloadImageTask
アクティビティUIスレッドで実行されるのメソッドをトリガーして、DownloadImageTask
アクティビティのメソッドにアクセスしようとする場合があります(これは内部クラスであるためfindViewByID
、以下の例の呼び出しのように、一時停止または破棄されたアクティビティを使用して、外部クラスのメソッドとインスタンス変数にアクセスできます。黙って失敗しますか?例外は発生しますか?何か問題が発生したことがユーザーに通知されますか?
run-on-UIメソッドが呼び出されたときに起動スレッド(この場合はアクティビティ)がまだ生きていることに注意する必要がある場合、どうすればそれを?内から実行できますAsyncTask
か?
これが重複した質問であると思われる場合は申し訳ありませんが、この質問はもう少し明確で、誰かがより詳細に回答できる可能性があります