Browse Source

- InputInfo新增方法:`getInputFilters()`、`setInputFilters(InputFilter[] inputFilters)`、`addInputFilter(InputFilter inputFilter)` 和 `removeInputFilter(InputFilter inputFilter)`(issues:332);
- 尝试性修复 DialogFragment 模式实现下的 WaitDialog 内存泄漏问题(issues:334);

0.0.49.beta1
- 修复 BlurRelativeLayout 和 BlurLinearLayout 在 iOS 主题下使用 DialogFragment 模式时存在的渲染宽度和高度 <=0 导致的异常(issues:324);
- 修复 IOS 主题下可能存在的 `RSInvalidStateException: Calling RS with no Context active` 异常问题(issues:327);
- 修复可能存在的高频启关对话框过程中,因UI未完成构建被关闭引发的空指针异常(issues:331);

Kongzue 1 year ago
parent
commit
0f804bb5a5

+ 16 - 12
DialogX/src/main/java/com/kongzue/dialogx/dialogs/WaitDialog.java

@@ -380,18 +380,7 @@ public class WaitDialog extends BaseDialog {
 
                 @Override
                 public void onDismiss() {
-                    isShow = false;
-                    getDialogLifecycleCallback().onDismiss(WaitDialog.this);
-                    WaitDialog.this.onDismiss(WaitDialog.this);
-                    if (dialogImpl != null) dialogImpl.clear();
-                    dialogImpl = null;
-                    if (dialogView != null) dialogView.clear();
-                    dialogView = null;
-                    dialogLifecycleCallback = null;
-                    if (me != null) me.clear();
-                    me = null;
-                    setLifecycleState(Lifecycle.State.DESTROYED);
-                    System.gc();
+                    cleanInstance();
                 }
             });
 
@@ -699,6 +688,21 @@ public class WaitDialog extends BaseDialog {
         }
     }
 
+    public void cleanInstance() {
+        isShow = false;
+        getDialogLifecycleCallback().onDismiss(WaitDialog.this);
+        WaitDialog.this.onDismiss(WaitDialog.this);
+        if (dialogImpl != null) dialogImpl.clear();
+        dialogImpl = null;
+        if (dialogView != null) dialogView.clear();
+        dialogView = null;
+        dialogLifecycleCallback = null;
+        if (me != null) me.clear();
+        me = null;
+        setLifecycleState(Lifecycle.State.DESTROYED);
+        System.gc();
+    }
+
     private void setDialogImpl(DialogImpl d) {
         if (dialogImpl != null && dialogImpl.get() != d) dialogImpl = new WeakReference<>(d);
     }

+ 6 - 0
DialogX/src/main/java/com/kongzue/dialogx/interfaces/BaseDialog.java

@@ -34,6 +34,7 @@ import androidx.lifecycle.LifecycleRegistry;
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.dialogs.BottomDialog;
+import com.kongzue.dialogx.dialogs.WaitDialog;
 import com.kongzue.dialogx.impl.ActivityLifecycleImpl;
 import com.kongzue.dialogx.impl.DialogFragmentImpl;
 import com.kongzue.dialogx.util.ActivityRunnable;
@@ -807,6 +808,7 @@ public abstract class BaseDialog implements LifecycleOwner {
                     for (BaseDialog baseDialog : copyOnWriteList) {
                         if (baseDialog.getOwnActivity() == activity && baseDialog.dialogView != null) {
                             WindowUtil.dismiss(baseDialog.dialogView.get());
+                            runningDialogList.remove(baseDialog);
                         }
                     }
                 }
@@ -817,6 +819,10 @@ public abstract class BaseDialog implements LifecycleOwner {
                     for (BaseDialog baseDialog : copyOnWriteList) {
                         if (baseDialog.getOwnActivity() == activity && baseDialog.ownDialogFragmentImpl != null && baseDialog.ownDialogFragmentImpl.get() != null) {
                             baseDialog.ownDialogFragmentImpl.get().dismiss();
+                            if (baseDialog instanceof WaitDialog){
+                                ((WaitDialog) baseDialog).cleanInstance();
+                            }
+                            runningDialogList.remove(baseDialog);
                         }
                     }
                 }