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

Iva*_*n S 38 java time android wait

基本上我需要暂停(基于几秒钟)才能进行一个操作,以便用户可以看到在采取下一个操作之前会发生什么.因此,对于二十一点,当它是经销商的轮到他决定击中时,他会命中,一张牌被添加,然后他决定接下来该做什么.因此,在他决定下一步该做什么之前,我希望代码暂停,以便可以"看到"经销商在做什么,这样经销商不会在不到一秒的时间内完成他的行动而玩家只能看到结果.

提前致谢!

我应该注意到我尝试过使用wait(这里插入数字); 但我被eclipse告知它会导致堆栈拦截错误或类似的东西并抛出异常,从而无所作为:(

嗯,这很有趣,(我编程的方式是"有趣的"至少可以说)我做了Thread.sleep(5000)并把它扔在一个试试捕获,它确实睡了5秒然后继续做代码.但是,在我按下按钮之后才会显示我对视图的更新(真的很讨厌事件驱动编程).

ada*_*amp 98

学习以事件来思考确实是关键.你能行的.:)

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

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在创建活动5秒后,您将看到创建的吐司doStuff.

如果您正在编写自定义文件,View那就更容易了.视图有自己的postDelayed方法,可以将所有内容发布到正确的位置Handler,而不需要创建自己的方法.

第二条规则是:应在UI线程上修改视图.你得到和忽略的那些例外意味着出错了,如果你忽略它们,你的应用程序可能会以有趣的方式开始行为不端.如果您的应用程序在其他线程中完成大部分工作,您可以将post事件直接发送到要修改的视图,以便修改可以正确运行.

如果您Activity从代码的那一部分引用了您的代码,那么您也可以使用Activity#runOnUIThread,这与名称所暗示的完全相同.如果发布到单个视图在上下文中确实没有意义,那么您可能更喜欢这种方法.

至于在点击按钮之前没有出现的视图更新,这些视图是什么类型的?它们是自定义视图正在绘制这些更新吗?如果是这样,您是否记得invalidate在数据更改后调用以触​​发重绘?视图仅在失效后才重绘.