Android 通过 AlertDialog 与用户进行深度代码通信

问题描述 投票:0回答:1

在 Android 游戏(用 Java 编写)中,我有一个调用服务的活动,并且服务调用一个检查某些值的管理器。 活动代码看起来像这样:

public void performACheck() {
    service.doYourThing();
    decideIfGameIsLostOrWon();
}

有时,“服务”内的 Manager 内部的深层代码需要“重新出现”并要求用户(通过 AlertDialog)做出可能防止他输掉游戏的决定(选择一个值)。 “深层代码”和 Activity 之间的通信是使用观察者模式进行的。显然,在玩家做出选择之前不应调用方法“decideIfGameIsLostOrWon()”,但如果没有显示 AlertDialog,则应照常执行方法“decideIfGameIsLostOrWon()”。

问题是,无论我到目前为止尝试过什么(处理程序、CountDownLatches) - 方法“decideIfGameIsLostOrWon()”总是在出现 AlertDialog 之前执行。就好像 Activity 类在最后收到关于 PropertyChange(观察者)的通知,默认情况下,Android 总是在调用它的整个方法执行完毕后处理显示 AlertDialog。 我非常绝望,我正在考虑在“service.doYourThing();”之后冻结主线程被调用以确保在显示任何挂起的 AlertDialog 并正确处理结果之前停止执行该方法的其余部分...

知道发生了什么事以及如何解决这个问题吗?

android android-alertdialog android-handler
1个回答
0
投票

正确的做法是设置一个计时器。如果计时器超时,则将其视为对话框超时并调用decideIfGameIsWLostOrWon。显示对话框,并对选项使用标准事件处理。当他们选择一个选项时,调用decideIfGameIsLostOrWon()。如果您由于某种原因决定不显示对话框,您可以等待超时,或者您可以设置一些值来告诉您没有显示对话框并立即调用decideIfGameIsLostOrWon。

顺便说一句,如果您使用 kotlin 将其重写为协程可能是最好的选择。

© www.soinside.com 2019 - 2024. All rights reserved.