首页 > 解决方案 > 活动没有足够快地暂停

问题描述

在我的 AppCompatActivity 中,我在特定事件中显​​示了一个 AlertDialog。

显示 AlertDialog 后,用户将无法再单击 AppCompatActivity 中的任何内容。

我试图禁用 onPause() 中的活动:getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

并检查它是否没有暂停:getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)

但似乎 onPause() 的调用速度不够快。

每当我暂停 AppCompatActivity 时,我可以将静态布尔值设置为 true,在 onResume() 中将其设置为 false 并在每个 onClickListener/onTouchListener 等中检查它,但是有更好的方法吗?

每一个帮助表示赞赏!

编辑: 感谢您的评论!我发现,当我在启动 UI 线程(用于打开 AlertDialog)时单击屏幕时,单击会被放入队列中。这就是在 AlertDialog 运行时执行 click 事件的原因。我是否需要保存 AlertDialog 并检查它是否正在运行或者是否有更好的方法?

标签: javaandroid

解决方案


我相信您应该让我们更多地了解您的代码。不过,我想我可以猜到你在说什么。android中的每个视图组件都有一个setEnabled(false)方法,如果您在视图组件java对象上调用它,它将被禁用并且不再可点击。因此,只要您想显示 AlertDialog,您就可以简单地禁用您的组件,然后setEnabled(true)如果您愿意,可以通过调用再次启用它们。我很确定暂停活动不是你应该做的。因为手动进行,无论如何都不是最佳实践。


推荐阅读