我在整个项目中都在执行以下操作,这会产生内存泄漏吗?
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mContext = activity;
}
然后是这样的方法:
new AlertDialog.Builder(mContext)
.setTitle(getActivity().getString(
R.string.common_error))
.setMessage(getActivity().getString(
R.string.common_please_try_again))
.setPositiveButton(android.R.string.yes, null)
.show();
上面做的好吗?如果我试图在AsyncTask的onPostExecute()中显示AlertDialog会怎么样?
编辑:正如所指出的那样,这会产生内存泄漏,因为我试图在其生命周期之外访问Activity的Context。
但是下面会导致同样的问题吗?从DialogFragment显示AlertDialog有什么好的通用解决方案?
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mCallback = (MyCallback)activity;
}
然后是这样的方法:
if(mCallback != null){
mCallback.showAlertDialog();
}
这是否会产生内存泄漏,将它包装在WeakReference中修复任何内存泄漏?
答案 0 :(得分:1)
在显示AlertDialog
之前,您可以检查Fragment
是否已添加到Activity
if (getActivity != null) {
// Show dialog
}
或
if (isAdded()) {
// Show dialog
}