我在下面有这个代码示例,我想确保不会发生任何内存。通过将整个活动传递给异步任务将导致内存泄漏,如果任务本身将具有比活动更大的生命周期。但是,如果我声明一个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
}
}
答案 0 :(得分:0)
使用WeakReference时不需要显式归零。关于在Activity中使用AsyncTask,请注意不要创建匿名实例,因为它将隐藏引用封闭类,这可能导致内存泄漏。
您发布的代码似乎没问题,不要忘记在重新创建活动时优雅地终止AsyncTask。