泄漏的窗口com.android.internal.policy.impl.PhoneWindow$DecorView@40810e90原来是加在这里的

泄漏的窗口com.android.internal.policy.impl.PhoneWindow$DecorView@40810e90原来是加在这里的,android,calendar,Android,Calendar,我的logcat错误是: public void SaveData() { ....... addToCalendar(this, edSubject.getText().toString(), startMillis, endMillis); } 01-16 17:17:56.740:E/WindowManager(4166):Activity com.sree.weekdayview.calendar.activit

我的logcat错误是:

    public void SaveData()
  { 
                .......
              addToCalendar(this, edSubject.getText().toString(), startMillis, endMillis);
}
01-16 17:17:56.740:E/WindowManager(4166):Activity com.sree.weekdayview.calendar.activities.Activity约会泄露了window com.android.internal.policy.impl.PhoneWindow$DecorView@40810e90原来是加在这里的
01-16 17:17:56.740:E/WindowManager(4166):android.view.WindowLeaked:Activity com.sree.weekdayview.calendar.activies.Activity约会已泄漏window com.android.internal.policy.impl.PhoneWindow$DecorView@40810e90原来是加在这里的
01-16 17:17:56.740:E/WindowManager(4166):在android.view.ViewRoot.(ViewRoot.java:291)
01-16 17:17:56.740:E/WindowManager(4166):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:249)
01-16 17:17:56.740:E/WindowManager(4166):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:193)
01-16 17:17:56.740:E/WindowManager(4166):在android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:118)
01-16 17:17:56.740:E/WindowManager(4166):在android.view.Window$LocalWindowManager.addView(Window.java:532)
01-16 17:17:56.740:E/WindowManager(4166):在android.app.Dialog.show(Dialog.java:269)上
01-16 17:17:56.740:E/WindowManager(4166):位于com.sree.weekdayview.calendar.activities.ActivityAppointment.SaveData(ActivityAppointment.java:381)
01-16 17:17:56.740:E/WindowManager(4166):位于com.sree.weekdayview.calendar.activities.ActivityAppointment$3.onClick(ActivityAppointment.java:123)

由于显示的对话框,出现此错误。对话框与其主机(活动)的生命周期紧密相连,这意味着您通常不应尝试在专用平台方法之外创建和/或显示对话框。在您的情况下,当对话框显示时,活动可能会被破坏(例如,由于方向改变),因此出现异常

有两种方法可以将对话框的生命周期绑定到其主机的生命周期:

  • 在API级别13之前,专用的平台方法是
    onCreateDialog()
    (和
    showDialog()
    /
    dismissDialog()
    )。它们在“活动”中可用,应被重写以基于id创建/显示/取消对话框

  • 从API级别13开始,上述方法被弃用,取而代之的是
    DialogFragment
    ,它是一个围绕对话框的片段包装器,其生命周期由
    FragmentManager
    管理

  • 我建议您的第三种选择是将
    DialogFragment
    方法与支持库结合使用。这基本上是选项二,但使用后端口功能,使现代逻辑能够在运行Android 1.6及以上的设备上工作

    有关实现的详细信息,请参阅Android开发站点上的。可以找到使用不推荐的方法的示例

        public void SaveData()
      { 
                    .......
                  addToCalendar(this, edSubject.getText().toString(), startMillis, endMillis);
    }
    
    01-16 17:17:56.740: E/WindowManager(4166): Activity com.sree.weekdayview.calendar.activities.ActivityAppointment has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40810e90 that was originally added here
    01-16 17:17:56.740: E/WindowManager(4166): android.view.WindowLeaked: Activity com.sree.weekdayview.calendar.activities.ActivityAppointment has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40810e90 that was originally added here
    01-16 17:17:56.740: E/WindowManager(4166):  at android.view.ViewRoot.<init>(ViewRoot.java:291)
    01-16 17:17:56.740: E/WindowManager(4166):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:249)
    01-16 17:17:56.740: E/WindowManager(4166):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:193)
    01-16 17:17:56.740: E/WindowManager(4166):  at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:118)
    01-16 17:17:56.740: E/WindowManager(4166):  at android.view.Window$LocalWindowManager.addView(Window.java:532)
    01-16 17:17:56.740: E/WindowManager(4166):  at android.app.Dialog.show(Dialog.java:269)
    01-16 17:17:56.740: E/WindowManager(4166):  at com.sree.weekdayview.calendar.activities.ActivityAppointment.SaveData(ActivityAppointment.java:381)
    01-16 17:17:56.740: E/WindowManager(4166):  at com.sree.weekdayview.calendar.activities.ActivityAppointment$3.onClick(ActivityAppointment.java:123)