在 Android 中执行定时操作的最佳实践

Best practice for executing timed actions in Android

在我的代码的特定部分需要 运行 定时 space 3 个动作,现在我正在使用这个方法:

Handler mHander = new Handler();


public void startChainActions(){

// do first action
      mHandler.postDelayed(new Runnable() {
          @Override
          public void run() {

          //do action 2

                    mHandler.postDelayed(new Runnable() {
                    @Override
                    public void run() {

                    //do action 3
                    }
                  }
                }, 1500);

              }
             }
            }, 5000);
           }


public void cleanResources(){

    mHandler.removeCallbacksAndMessages(null);
    mHandler==null
}

使用此方法时,我经常在 logcat:

上看到此消息
W/art﹕ Suspending all threads took: 12.272ms

这让我相信它正在降低性能。 有没有更好的方法来安排每个动作的时间?

首先你应该明白,在处理程序的情况下,你将在创建处理程序的同一线程中执行 Runnable。这意味着如果您 运行 在主线程中,您将与任何用户<->UI 交互共享硬件能力,并且无法保证执行开始的确切时间。

回答您来自 body 的问题 - 不,没有因为 2 postDelayed 次调用而导致性能下降,但可能是因为您的操作。所以你的日志消息与其他东西有关。

更新: 从标题回答你的问题:如果你想 运行 延迟行动,那就是 - 这是在 Android 中执行此操作的正常方法,特别是如果你想 运行 main/UI 线程。

我们可以不使用下面的SingleThreadExecutor吗?

ExecutorService animationQueue = Executors.newSingleThreadExecutor();

animationQueue.submit( new Runnable() {
    public void run() {
        // action 1
        Thread.sleep(5000);
    }
});

animationQueue.submit( new Runnable() {
    public void run() {
        // action 2
        Thread.sleep(1500);
    }
});

animationQueue.submit( new Runnable() {
    public void run() {
        // action 3
    }
});