diff --git a/floatwindow/src/main/java/com/yhao/floatwindow/FloatLifecycle.java b/floatwindow/src/main/java/com/yhao/floatwindow/FloatLifecycle.java index 6639043..81d7031 100644 --- a/floatwindow/src/main/java/com/yhao/floatwindow/FloatLifecycle.java +++ b/floatwindow/src/main/java/com/yhao/floatwindow/FloatLifecycle.java @@ -45,6 +45,11 @@ class FloatLifecycle extends BroadcastReceiver implements Application.ActivityLi applicationContext.registerReceiver(this, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)); } + public void unRegisterReceiver(Context applicationContext) { + ((Application) applicationContext).unregisterActivityLifecycleCallbacks(this); + applicationContext.unregisterReceiver(this); + } + public static void setResumedListener(ResumedListener resumedListener) { sResumedListener = resumedListener; } diff --git a/floatwindow/src/main/java/com/yhao/floatwindow/FloatWindow.java b/floatwindow/src/main/java/com/yhao/floatwindow/FloatWindow.java index bc57903..3239c04 100644 --- a/floatwindow/src/main/java/com/yhao/floatwindow/FloatWindow.java +++ b/floatwindow/src/main/java/com/yhao/floatwindow/FloatWindow.java @@ -51,8 +51,23 @@ public static void destroy(String tag) { return; } mFloatWindowMap.get(tag).dismiss(); + mFloatWindowMap.get(tag).destory(); mFloatWindowMap.remove(tag); } + + public static void destroyAll() { + if (mFloatWindowMap == null) return; + for (IFloatWindow iFloatWindow : mFloatWindowMap.values()) { + try { + iFloatWindow.dismiss(); + iFloatWindow.destory(); + mFloatWindowMap.remove(iFloatWindow); + } catch (Exception e) { + e.printStackTrace(); + } + } + mFloatWindowMap = null; + } public static class B { Context mApplicationContext; diff --git a/floatwindow/src/main/java/com/yhao/floatwindow/IFloatWindow.java b/floatwindow/src/main/java/com/yhao/floatwindow/IFloatWindow.java index 18b1d3d..b7c343d 100644 --- a/floatwindow/src/main/java/com/yhao/floatwindow/IFloatWindow.java +++ b/floatwindow/src/main/java/com/yhao/floatwindow/IFloatWindow.java @@ -29,4 +29,6 @@ public abstract class IFloatWindow { public abstract View getView(); abstract void dismiss(); + + public abstract void destory(); } diff --git a/floatwindow/src/main/java/com/yhao/floatwindow/IFloatWindowImpl.java b/floatwindow/src/main/java/com/yhao/floatwindow/IFloatWindowImpl.java index 65f222e..a35ef66 100644 --- a/floatwindow/src/main/java/com/yhao/floatwindow/IFloatWindowImpl.java +++ b/floatwindow/src/main/java/com/yhao/floatwindow/IFloatWindowImpl.java @@ -77,6 +77,12 @@ public void onBackToDesktop() { } }); } + + @Override + public void destory() { + if (mFloatLifecycle == null) return; + mFloatLifecycle.unRegisterReceiver(mB.mApplicationContext); + } @Override public void show() {