gpt4 book ai didi

android - Android中线程的这种使用会是无限的吗

转载 作者:行者123 更新时间:2023-11-29 02:12:52 27 4
gpt4 key购买 nike

我有一个纸牌游戏,其中游戏自动从玩家传递到游戏。有 3 个非用户玩家,并且每隔几秒(由用户指定)从一个播放到下一个,无需用户干预。

我有两种控制流程的方法:

  1. awaitTurn 用于等待转弯开始
  2. 在实际转弯开始时转弯

他们都在同一个类(class)。每个玩家都有自己的类实例。

玩家完成其回合后,它会调用下一个玩家的“awaitTurn()”,依此类推。

在 3 个自动播放器轮到它之后,控制被发送到用户的“awaitTurn()”,它实际上不做任何事情并允许用户轮到他/她。

为了暂停我写了下面的代码:

public void awaitTurn()
{
GameActivity.thisActivity.displayHideCont(View.VISIBLE);
if (GameActivity.settings.getPauseTimeBetweenTurns() > 0){
startNextPlayerTurn = new Runnable() {public void run() {doTurn();}};

if (handler == null)
handler = new Handler();
else
handler.removeCallbacks(startNextPlayerTurn);

int extraDelay = GameActivity.settings.getCardAnimationTime();

handler.postDelayed(startNextPlayerTurn,
(GameActivity.settings.getPauseTimeBetweenTurns())*1000 + extraDelay);
}

return;
}

doTurn 中我有:

public void doTurn() {    
if (startNextPlayerTurn!=null) // just in case we are still pausing
handler.removeCallbacks(startNextPlayerTurn);
...
}

所以,最大的问题是,我是否在这里构建无限深度的线程,其中一个线程是否来自另一个线程。

最佳答案

您不在应用程序中创建线程。您在主 UI 线程中运行所有函数(假设处理程序是在 UI 线程中创建的)。

这是发生了什么:

  1. 调用 handler.postDelayed(runnableX, delayX)runnableX 放入 UI 队列,并将在 delayX 之后处理。
  2. 时间一到,UI 线程的循环获取 runnableX 并运行它。

如果您调用 handler.removeCallbacks(runnableX),则所有带有 runnableX 的未决消息都会从队列中删除(并且不会运行)。

如果您多次调用 handler.postDelayes(runnableX, delayX),那么您的 runnableX 将被多次调用。但每次都会在 UI 线程上运行。

很遗憾,无法检查您的 runnableX 是否已发布到队列。

关于android - Android中线程的这种使用会是无限的吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6239471/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com