Android 如何调试FragmentContainerActivity已泄漏窗口

Android 如何调试FragmentContainerActivity已泄漏窗口,android,Android,生成此日志错误的我的代码 final Dialog dialog = new Dialog(getActivity()); dialog.show(); 下面是错误日志 E/WindowManager: android.view.WindowLeaked: Activity com.eonelectric.eon.FragmentContainerActivity has leaked window com.android.internal.policy.impl.PhoneWindow$De

生成此日志错误的我的代码

final Dialog dialog = new Dialog(getActivity());
dialog.show();
下面是错误日志

E/WindowManager: android.view.WindowLeaked: Activity com.eonelectric.eon.FragmentContainerActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{201c1a84 V.E..... R.....ID 0,0-897,540} that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:375)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:271)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
at android.app.Dialog.show(Dialog.java:298)
at com.eonelectric.eon.fragments.BeatRecordFragment.showOverLay(BeatRecordFragment.java:2360)
at com.eonelectric.eon.fragments.BeatRecordFragment.onCreateView(BeatRecordFragment.java:259)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2087)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1113)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1295)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:181)
at com.eonelectric.eon.GPlusLogoutHelperGCActivity.onStart(GPlusLogoutHelperGCActivity.java:48)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1259)
at android.app.Activity.performStart(Activity.java:6026)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
at android.app.ActivityThread.access$800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
E/WindowManager:android.view.WindowLeaked:Activity com.eonelectric.eon.FragmentContainerActivity已泄漏最初添加到此处的window com.android.internal.policy.impl.PhoneWindow$DecorView{201c1a84 V.E…..R…..ID 0-897540}
在android.view.ViewRootImpl。(ViewRootImpl.java:375)
在android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:271)
在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
在android.app.Dialog.show(Dialog.java:298)
在com.eonetric.eon.fragments.BeatRecordFragment.showOverLay(BeatRecordFragment.java:2360)上
在com.eonetric.eon.fragments.BeatRecordFragment.onCreateView(BeatRecordFragment.java:259)上
位于android.support.v4.app.Fragment.performCreateView(Fragment.java:2087)
位于android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1113)
位于android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1295)
位于android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
位于android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682)
位于android.support.v4.app.FragmentController.ExecutPendingActions(FragmentController.java:388)
位于android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607)
位于android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:181)
在com.eonelectric.eon.GPlusLogoutHelperGCActivity.onStart(GPlusLogoutHelperGCActivity.java:48)
位于android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1259)
位于android.app.Activity.performStart(Activity.java:6026)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
在android.app.ActivityThread.access$800(ActivityThread.java:155)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:135)
位于android.app.ActivityThread.main(ActivityThread.java:5343)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:905)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

如何修复此错误?它在哪里泄漏?是什么原因造成的

活动完成并进入后台时,您正在尝试显示对话框。 活动内部检查活动是否已完成

if(isFinishing()) return;
final Dialog dialog = new Dialog(getActivity());
dialog.show();
在片段中,您可以编写:

if(getActivity() != null && !getActivity().isFinishing()) {
    final Dialog dialog = new Dialog(getActivity());
    dialog.show();   
}