Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在异步任务中使用与活动关联的静态变量_Android_Android Asynctask - Fatal编程技术网

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

我有一个带有静态变量s的活动A。我将活动实例传递给async task进行一些处理。假设在此期间,活动被android操作系统关闭(垃圾收集),并且
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);