避免使用弱引用Android的内存泄漏



我在下面有这个代码示例,我想确保不会发生内存。通过将整个活动传递给异步任务将导致内存泄漏,如果任务本身的生命周期比活动的生命周期大。但是如果我声明一个弱引用,意味着如果轮换即将发生,活动将被销毁而不会泄漏内存。对吗?我是否也必须将某些内容设置为 null?

主要.java

public class Main extends Activity {
private TextView mMessageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView();
new Background(this /*getBaseContext()*/ ).execute();
}
}

背景.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
}
}

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

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

最新更新