我在这里读了一些问题,有些文章在Internet上,但是关于AsyncTask内存泄漏的问题对我来说并不清楚.拜托,你能给我一个建议吗?
让我们考虑一些情况:
1)AsyncTask是一个内部类,
我编写了MyAsyncTask,用于从MyActivity代码中的服务器(<1 KB)下载小数据(不是静态类).它将存储对MyActivity实例的隐式引用.如果我将启动MyAsyncTask.execute(),那么MyActivity实例不能被Garbage Collected,直到此AsyncTask完成.因此,如果我在执行AsyncTask期间旋转屏幕,那么旧的MyActivity实例将在内存中 - 这是内存泄漏.
我决定做什么:由于我的数据大小下载,我将在MyActivity中的onDestroy()方法中取消我的AsyncTask.通过这种方式,我有这样的MyActivity代码:
public class MyActivity extends Activity {
//views and constants
private MyAsyncTask air;
private ProgressDialog progressDialog;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.account_info_layout);
progressDialog = new ProgressDialog(this);
//findViewById, etc.
}
@Override
protected void onStart() {
super.onStart();
air = new MyAsyncTask();
air.execute();
}
@Override
protected void onDestroy() {
if (air.getStatus() == AsyncTask.Status.RUNNING) {
air.cancel(true);
}
air = null;
super.onDestroy();
}
class MyAsyncTask extends AsyncTask<Void, Void, String> {
@Override …Run Code Online (Sandbox Code Playgroud)