处理 AsyncTask 警告类应该是静态的,否则可能会发生泄漏
Posted
技术标签:
【中文标题】处理 AsyncTask 警告类应该是静态的,否则可能会发生泄漏【英文标题】:Handling AsyncTask warning class should be static or leaks might occur 【发布时间】:2020-10-30 10:33:42 【问题描述】:我已创建为 asynctask 以将数据上传到服务器,如下所示。但它显示了这个警告。 这个 AsyncTask 类应该是静态的,否则可能会发生泄漏...... 我已阅读并尝试过弱引用样式,但我无法集成到此代码中。 如何在下面的代码中消除此警告?
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();
【问题讨论】:
【参考方案1】:如果您在函数上下文中执行此操作,则需要使您的 AsyncTask 匿名。比如:
public void ImageUploadToServerFunction()
final String imageName1 = GetImageNameEditText1.trim();
final String userName = GetUserName.trim();
final String imageView1 = getStringImage1(bitmap1);
new 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);
.execute();
但我强烈建议不要再在 android 中使用 AsyncTask。这是一种非常肮脏的异步操作方式,理所当然地应该被弃用。解决此问题的更好方法是使用RxJava。
【讨论】:
谢谢@Darren Finch。尽管代码从 new AsyncTask以上是关于处理 AsyncTask 警告类应该是静态的,否则可能会发生泄漏的主要内容,如果未能解决你的问题,请参考以下文章
此Loader类应该是静态的,否则可能会发生泄漏内部类内存泄漏| AsyncTaskLoader内存泄漏 -