在我需要在定时空间中运行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
这让我相信它会降低性能。 是否有更好的方法来相互计划时间?
答案 0 :(得分:0)
首先,你应该明白,在Handlers的情况下,你将在创建处理程序的同一个线程中执行Runnable。这意味着如果您在主线程中运行它,您将与任何用户< - > UI交互共享硬件能力,并且无法保证准确的执行开始时间。
从正文回答你的问题 - 不,由于2次postDelayed
电话,性能没有减慢,但可能是因为你的行为。因此,您的日志消息与其他内容相关联。
<强>更新强> 从标题回答你的问题:如果你想运行延迟动作,而不是 - 这是在Android中执行此操作的正常方式,特别是如果你要在主/ UI线程中运行它。
答案 1 :(得分:0)
我们不能使用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
}
});