异步任务内存泄漏警告 Android

Asynctask Memory Leak Warning Android

我创建了异步任务来将数据上传到服务器,如下所示。但它会在 class AsyncTaskUploadClass 处显示此警告。 “这个 AsyncTask class 应该是静态的,否则可能会发生泄漏……”我已经阅读并尝试了弱引用样式,但我无法将它集成到这段代码中。任何线索将不胜感激。

 public void ImageUploadToServerFunction(){
    final String imageName1 = GetImageNameEditText1.trim();
    final String userName = GetUserName.trim();
    final String imageView1 = getStringImage1(bitmap1);
  
    class AsyncTaskUploadClass extends AsyncTask<Void,Void,String> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog = ProgressDialog.show(UploadActivity.this,"Your Data is Uploading....",false,false);
        }
        @Override
        protected void onPostExecute(String string1) {
            super.onPostExecute(string1);
            progressDialog.dismiss();
         }
        @Override
        protected String doInBackground(Void... params) {
            ImageProcessClass imageProcessClass = new ImageProcessClass();
            HashMap<String,String> HashMapParams = new HashMap<>();
            HashMapParams.put(ImageName1, imageName1);
            HashMapParams.put(UserName, userName);
            HashMapParams.put(ImagePath1, imageView1);
            return imageProcessClass.ImageHttpRequest(ServerUploadPath, HashMapParams);
        }
    }
    AsyncTaskUploadClass AsyncTaskUploadClassOBJ = new AsyncTaskUploadClass();
    AsyncTaskUploadClassOBJ.execute();
}

这是 Java 的内部 classes 的本质 - class 中的 class 具有对父实例的隐藏引用。这可能会导致内存泄漏。避免这种情况的方法是使其成为静态内部 class- static class Foo。这将导致它删除隐藏引用,但内部 class 将无法再引用父函数或成员变量。

更实际 - 这种类型的 AsyncTask,虽然从技术上讲它会导致临时泄漏,但只要 doInBackground 函数在合理的时间内终止,它就相当安全。对于此 class,如果 imageProcessClass.ImageHttpReques() 在合理的时间内运行并终止(出现超时错误或完成其工作),这不是泄漏问题 - 只是父级class,它看起来像一个 Activity,在它释放之前不会被释放。因此,如果 Activity 已完成但请求正在处理,它将迫使父 class 停留一两秒,比需要的时间长。