我见过几个几乎与我相同的问题,但我找不到满足我所有疑问的完整答案..所以我在这里..假设你有一个内部类的活动,它扩展了这样的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")
}
}
假设 Activity 暂停或销毁(可能两种情况不同),而 ActivityDownloadImageTask
仍在后台运行。那么,DownloadImageTask
运行在 Activity UI 线程上的方法可以被触发,并且DownloadImageTask
可能会尝试访问 Activity 的方法(它是一个内部类,因此它可以通过暂停或销毁的 Activity 访问外部类的方法和实例变量,就像findViewByID
下面示例中的调用一样。然后会发生什么?它会默默地失败吗?它会产生任何异常吗?是否会通知用户出现问题?
如果我们应该注意在调用 UI 上运行的方法时启动线程(在本例中为 Activity)仍然处于活动状态,我们如何在AsyncTask
?
如果您发现这是一个重复的问题,我很抱歉,但也许这个问题更加清晰,有人可以更详细地回答