小编use*_*397的帖子

Android AsyncTask内存泄漏

我在这里读了一些问题,有些文章在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)

android memory-leaks android-asynctask

4
推荐指数
1
解决办法
4757
查看次数

标签 统计

android ×1

android-asynctask ×1

memory-leaks ×1