【问题标题】:How to delay execution of code without using threads in Android如何在不使用Android中的线程的情况下延迟代码的执行
【发布时间】:2015-03-29 22:13:29
【问题描述】:

我需要延迟一些代码的执行……比如说 2 秒,我必须使用这样的线程或处理程序:

new Thread (new Runnable() {
        public void run()
        {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) 
              {     }

            MainActivity.this.runOnUiThread(new Runnable()
            {
                public void run ()
                {
                    nextPlayerTurn();
                }
            });
        }
    }).start();

这是一个好方法吗?

nextPlayerTurn() 方法调用其他使用动画的方法,这些动画实现了 OnAnimationEnd 侦听器(调用的方法也需要延迟代码的执行)。我担心的是,每次我使用上面的代码时,我都会在后台创建另一个永不消亡的线程。

所以问题是 - 线程一旦到达 runOnUiThread() 方法就会死掉,不管 runOnUiThread() 中的代码执行需要多长时间?

【问题讨论】:

    标签: java android multithreading


    【解决方案1】:

    这是一个好方法吗?

    这样做会更有效率:

    someWidget.postDelayed(new Runnable()
            {
                public void run ()
                {
                    nextPlayerTurn();
                }
            }, 2000);
    

    这会执行 2 秒的延迟,并让您重新控制主应用程序线程。它节省了分叉线程,然后必须使用runOnUiThread() 将控制权返回给主应用程序线程。在这里,someWidget 是您 UI 中的一些小部件——任何都可以。

    我担心的是,每次我使用上面的代码时,我都会在后台创建另一个永不消亡的线程。

    不,当您与Thread 一起使用的Runnable 中的run() 结束时,该线程将消失。

    一旦到达 runOnUiThread() 方法,线程是否会死掉,无论 runOnUiThread() 中的代码执行需要多长时间?

    我将其表述为“线程在调用runOnUiThread() 后死亡,但runOnUiThread() 是异步的,并且在后台线程上花费的时间很少”。

    【讨论】:

      猜你喜欢
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      • 2013-08-24
      相关资源
      最近更新 更多