短时间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验证无问题