使用WeakReference Android避免内存泄漏

时间:2018-05-23 11:19:44

标签: android memory-management memory-leaks

我在下面有这个代码示例,我想确保不会发生任何内存。通过将整个活动传递给异步任务将导致内存泄漏,如果任务本身将具有比活动更大的生命周期。但是,如果我声明一个weakReference,意味着如果一个旋转即将发生,活动将被销毁而不会发生内存泄漏。对吗?我是否还必须将某些东西设为空?

Main .java

public class Main extends Activity {

  private TextView mMessageView;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView();

    new Background(this /*getBaseContext()*/ ).execute();
  }
}

Background.java

 public class Background extends AsyncTask<String, Void, String>
{
    private WeakReference activity;

    public void Background(Activity act)
    {
          activity = new WeakReference(act);
    }

    @Override
    protected String doInBackground(String... params)
    {

    }

    @Override
    protected void onPostExecute(String result)
    {  
            if(activity.get()!=null)
            //ToDo
    }
}

1 个答案:

答案 0 :(得分:0)

使用WeakReference时不需要显式归零。关于在Activity中使用AsyncTask,请注意不要创建匿名实例,因为它将隐藏引用封闭类,这可能导致内存泄漏。

您发布的代码似乎没问题,不要忘记在重新创建活动时优雅地终止AsyncTask。