我有一个带有静态变量s的活动A.我将活动实例传递给异步任务进行一些处理。假设,同时活动被Android操作系统关闭(垃圾收集)并且AsyncTask
正在后台运行。
在AsyncTask
现在它正在尝试访问As不可用,所以,它引发了一个例外。有没有解决方案。提前谢谢。
答案 0 :(得分:2)
关闭活动时停止asyncTask。因此,asyncTask将不再尝试访问该活动。
答案 1 :(得分:0)
只需添加空检查即可避免异常。 示例:强>
if (A != null && A.s != null) {
// proceed with your attempt to update the A.s variable
}
答案 2 :(得分:0)
尝试以下操作,不要将s保持为静态,只需将其传递给doInBackground方法并从onPostExecute方法收集结果。
private class someLongRunningOperation extends AsyncTask<ArrayList, Progress, Result>{
@Override
protected Result doInBackground(ArrayList... params) {
// TODO Auto-generated method stub
String s=params[0];
//Do operations on the data
...
return s;
}
}
呼叫:
someLongRunningOperation longTask= new someLongRunningOperation ();
longTask.execute(yourList1, yourList2, yourList3...);
请注意,您所描述的问题也可能在屏幕方向更改期间发生,如果您正在使用片段,请使用
setRetainInstance(true);
在活动重新制作中保存数据。