junixapp/XPopup

短时间show dismiss 无法显示

Opened this issue · 9 comments

XPopup版本
如2.9.19

手机系统和型号
华为Mate20 Android 10

描述你的问题
同一xpop频繁show dismiss之后(可复用)异常:
2023-05-06 19:36:16.061 进行show操作(正常弹出);
2023-05-06 19:36:16.736 执行dismiss 操作(正常关闭);
2023-05-06 19:36:16.739 执行show操作(异常)
代码如下:
public LoadingPopupView getLoadingPopupView() {

    if (loadingPopupView == null) {
        loadingPopupView = new XPopup.Builder(this)
                .customHostLifecycle(getLifecycle())
                .isDestroyOnDismiss(false)
                .dismissOnTouchOutside(false)
                .dismissOnBackPressed(true)
                .isLightNavigationBar(true)
                .isLightStatusBar(true)
                .isViewMode(false)

// .asLoading(null, R.layout.custom_loading_popup)
.asLoading(getString(R.string.loading));
} else {
loadingPopupView.setTitle(getString(R.string.loading));
}
return loadingPopupView;
}

public void showIndicator() {
if (isActivityIsNotDestroyed()) {
getLoadingPopupView();
if (loadingPopupView != null) {
KlogUtils.e("我要被show出来了~~~~");
loadingPopupView.show();
}
}

}

public void hideIndicator() {
if (isActivityIsNotDestroyed()) {
if (loadingPopupView != null && loadingPopupView.isShow()) {
KlogUtils.e("我要被dissmiss了~~~~");
loadingPopupView.dismiss();
}
}

}

原因我猜想应该是动画时长导致的

因为动画市场导致的,这个需要处理下,需要处理成类似队列似的

我遇到一样的问题,我的场景是继承自BasePopupView的loadingPopup隐藏,然后另一个继承自BasePopupView的弹窗显示。我打印log,一个安排在loadingPopup.dismiss()之前,一个在它之后。结果发现卡在dismiss方法里面,后面那条log没显示。突然福至心灵,在loadingPopup.dismiss()加了个try-catch。结果Logcat报错:“java.lang.IllegalStateException: Method handleLifecycleEvent must be called on the main thread”,定位到dismiss()方法的lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE);
它的enforceMainThreadIfNeeded("handleLifecycleEvent");
报错了,抛出异常了。
知道确切的原因,剩下的就简单了,我直接在一个loadingPopup.dismiss()外面套一个runOnUIThread()就解决了。
不过这个东西XPopup完全可以直接搞定更加方便。

仔细看了前面,你的问题是同一弹窗,我的是不同弹窗。好像不太一样哈~

你也可以试试加try-catch,看是不是那个问题导致的。

你也可以试试加try-catch,看是不是那个问题导致的。
你用try catch 是因为会崩溃? 我的这个问题是不会崩溃的 只是不会show出来

我的没崩溃,就是第二个弹窗死活弹不出来,其实就是卡在dismiss方法里面了,后面的代码都没走到

XPopup版本 如2.9.19

手机系统和型号 华为Mate20 Android 10

描述你的问题 同一xpop频繁show dismiss之后(可复用)异常: 2023-05-06 19:36:16.061 进行show操作(正常弹出); 2023-05-06 19:36:16.736 执行dismiss 操作(正常关闭); 2023-05-06 19:36:16.739 执行show操作(异常) 代码如下: public LoadingPopupView getLoadingPopupView() {

    if (loadingPopupView == null) {
        loadingPopupView = new XPopup.Builder(this)
                .customHostLifecycle(getLifecycle())
                .isDestroyOnDismiss(false)
                .dismissOnTouchOutside(false)
                .dismissOnBackPressed(true)
                .isLightNavigationBar(true)
                .isLightStatusBar(true)
                .isViewMode(false)

// .asLoading(null, R.layout.custom_loading_popup) .asLoading(getString(R.string.loading)); } else { loadingPopupView.setTitle(getString(R.string.loading)); } return loadingPopupView; }

public void showIndicator() { if (isActivityIsNotDestroyed()) { getLoadingPopupView(); if (loadingPopupView != null) { KlogUtils.e("我要被show出来了~~~~"); loadingPopupView.show(); } }

}

public void hideIndicator() { if (isActivityIsNotDestroyed()) { if (loadingPopupView != null && loadingPopupView.isShow()) { KlogUtils.e("我要被dissmiss了~~~~"); loadingPopupView.dismiss(); } }

}

请问你解决了吗 我这边也出现这个问题了 同一个弹窗多次show dismiss, 执行多次之后就会不显示

XPopup版本 如2.9.19
手机系统和型号 华为Mate20 Android 10
描述你的问题 同一xpop频繁show dismiss之后(可复用)异常: 2023-05-06 19:36:16.061 进行show操作(正常弹出); 2023-05-06 19:36:16.736 执行dismiss 操作(正常关闭); 2023-05-06 19:36:16.739 执行show操作(异常) 代码如下: public LoadingPopupView getLoadingPopupView() {

    if (loadingPopupView == null) {
        loadingPopupView = new XPopup.Builder(this)
                .customHostLifecycle(getLifecycle())
                .isDestroyOnDismiss(false)
                .dismissOnTouchOutside(false)
                .dismissOnBackPressed(true)
                .isLightNavigationBar(true)
                .isLightStatusBar(true)
                .isViewMode(false)

// .asLoading(null, R.layout.custom_loading_popup) .asLoading(getString(R.string.loading)); } else { loadingPopupView.setTitle(getString(R.string.loading)); } return loadingPopupView; }
public void showIndicator() { if (isActivityIsNotDestroyed()) { getLoadingPopupView(); if (loadingPopupView != null) { KlogUtils.e("我要被show出来了~~~~"); loadingPopupView.show(); } }

}

public void hideIndicator() { if (isActivityIsNotDestroyed()) { if (loadingPopupView != null && loadingPopupView.isShow()) { KlogUtils.e("我要被dissmiss了~~~~"); loadingPopupView.dismiss(); } }

}

请问你解决了吗 我这边也出现这个问题了 同一个弹窗多次show dismiss, 执行多次之后就会不显示

implementation('com.github.billdizl:XPopup:2.10.4') 百万级日活app验证无问题