如何让代码在android中暂停几秒钟?

基本上我需要一个暂停(基于几秒钟)来进行一个动作,以便用户可以看到下一个动作之前会发生什么。 所以对于二十一点,当经销商轮到他决定打,他打,一张卡被添加,然后他决定下一步该怎么做。 所以,在决定下一步做什么之前,我希望代码暂停,这样就可以“看到”经销商正在做什么,这样经销商不会在一秒钟之内完成自己的行为,玩家只能看到结果。

提前致谢!

我应该注意到我尝试过使用wait(在这里插入数字); 但是我被eclipse告知,它会导致一个堆栈拦截错误或类的东西,并抛出一个exception,因此什么也不做:(

那么这很有趣,(我已经编程的东西是“有趣的”,至less可以说)我做了Thread.sleep(5000),并把它扔到一个try catch下,它睡了5秒,然后继续代码。 但是,我的更新视图不​​显示,直到我按下button(真的恨事件驱动编程)。

学习以事件来思考确实是这里的关键。 你能行的。 🙂

第一条规则是:永远不要拖延UI线程。 UI线程负责保持您的应用程序的响应。 你在那里做的任何工作都不应该阻止; 做你需要做的事情,尽快返回。 绝对避免在UI线程上执行I / O操作。 (有些地方由于生命周期的要求,无法真正帮助它,例如,在onPause保存应用程序的状态。)如果你曾经在UI线程Thread.sleep 用过 Thread.sleep ,那么你做错了。

Android使用用户看到的“应用程序不响应”(或“ANR”)错误强制执行此操作。 每当你在Android应用程序中看到这一点,这意味着开发者做了一些事情导致UI线程拖延了太久。 如果设备因为某种原因真的陷入困境,这个错误可能并不是应用程序开发者的错,但通常意味着应用程序做错了。

您可以通过发布自己的事件来使用此模型。 这给你一个简单的方法来告诉你的应用程序,“稍后再做”。 在Android中,张贴您自己的事件的关键在Handler类中。 postDelayed方法可以让你安排一个Runnable ,在一定的毫秒数后执行。

如果你有一个看起来像这样的活动:

 public class MyActivity extends Activity { private Handler mHandler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mHandler.postDelayed(new Runnable() { public void run() { doStuff(); } }, 5000); } private void doStuff() { Toast.makeText(this, "Delayed Toast!", Toast.LENGTH_SHORT).show(); } } 

然后在创build活动5秒后,您将看到在doStuff创build的敬酒。

如果你正在编写一个自定义的View那就更简单了。 视图有自己的postDelayed方法,将一切发布到正确的Handler ,你不需要创build自己的。

第二个规则是:视图只能在UI线程上修改。 你得到和忽略的例外意味着什么出了问题,如果你忽略它们,你的应用程序可能会以有趣的方式开始行为不端。 如果您的应用程序在其他线程中执行了大部分工作,则可以post事件直接发布到要修改的视图,以便修改能够正确运行。

如果你从你的代码的那一部分引用了你的Activity ,你也可以使用Activity#runOnUIThread ,这正是名字所暗示的。 如果张贴到单个视图在上下文中没有意义,您可能更喜欢这种方法。

至于更新的意见不会出现,直到你按下button,这是什么样的意见? 他们正在绘制这些更新的自定义视图? 如果是这样,你是否记得在数据更改后调用invalidate来触发重绘? 视图只有在它们失效后才能重绘。