【问题标题】:Order of execution lines of code代码执行行的顺序
【发布时间】:2012-07-18 20:20:03
【问题描述】:

我不明白:

在 ShakeListener 类中,我执行包含类中的例程。

套路是:

    public void showWord(){
        myShakeListener.stop();     

        flipper.showNext();

        v.vibrate(countdown5, -1);

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        myShakeListener.start();
    }

奇怪的事情(对我来说,仍然是一个初学者),是线程在显示下一个视图之前休眠。这是为什么呢?

我想要完成的操作:用户摇动手机 -> viewflipper 翻转到下一个 -> 手机在 5 秒内对摇动无响应 -> 用户摇动手机 -> viewflipper 翻转到下一个...

thnx

【问题讨论】:

    标签: java android sleep execution routines


    【解决方案1】:

    问题在于 viewflipper 可能是另一个线程。你遇到了比赛条件。更好的选择是生成一个 5 秒的线程,该线程在启动时将称为“noshake”之类的布尔值设置为 true,并在完成时将其设置为 false。在允许再次摇晃之前检查 noshake == false。

    这有意义吗?

    【讨论】:

    • 是的!我明白了.. 将很快实施并在此之后将此答案标记为正确。谢谢
    【解决方案2】:

    这是因为您的代码阻塞了 UI 线程。你应该这样做:

    Handler mHandler = new Handler();
    public void showWord(){
        myShakeListener.stop();     
    
        flipper.showNext();
    
        v.vibrate(countdown5, -1);
    
        mHandler.postAtTime(new Runnable() {
            @Override
            public void run() {
                myShakeListener.start();
            }
        }, 5000);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-02
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多