在异步任务中使用与活动关联的静态变量

时间:2015-07-29 11:49:16

标签: android android-asynctask

我有一个带有静态变量s的活动A.我将活动实例传递给异步任务进行一些处理。假设,同时活动被Android操作系统关闭(垃圾收集)并且AsyncTask正在后台运行。
AsyncTask现在它正在尝试访问As不可用,所以,它引发了一个例外。有没有解决方案。提前谢谢。

3 个答案:

答案 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); 

在活动重新制作中保存数据。