Android 在异步任务中使用与活动关联的静态变量
我有一个带有静态变量s的活动A。我将活动实例传递给async task进行一些处理。假设在此期间,活动被android操作系统关闭(垃圾收集),并且Android 在异步任务中使用与活动关联的静态变量,android,android-asynctask,Android,Android Asynctask,我有一个带有静态变量s的活动A。我将活动实例传递给async task进行一些处理。假设在此期间,活动被android操作系统关闭(垃圾收集),并且AsyncTask正在后台运行。在AsyncTask中,现在它正试图访问不可用的A.s,因此,它抛出异常。有什么解决办法吗。提前感谢。活动关闭时停止异步任务。因此,asyncTask将不再尝试访问活动。只需添加空检查以避免异常示例: if (A != null && A.s != null) { // proceed with
AsyncTask
正在后台运行。在
AsyncTask
中,现在它正试图访问不可用的A.s,因此,它抛出异常。有什么解决办法吗。提前感谢。活动关闭时停止异步任务。因此,asyncTask将不再尝试访问活动。只需添加空检查以避免异常示例:
if (A != null && A.s != null) {
// proceed with your attempt to update the A.s variable
}
尝试以下操作,不要将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;
}
}
请注意,如果您使用的是片段使用,那么您描述的问题也可能在屏幕方向更改期间发生
setRetainInstance(true);
要在活动再现中保存数据。这就是为什么有参数,请将所需的值作为参数传递给AsyncTask。我认为不需要静态变量。我所看到的只是方法中的内存泄漏。
setRetainInstance(true);