因此,在尝试维持轻量级资源负载时,我希望能够立即完成一些事情。例如,播放声音并同时更新GUI。拥有单个runnables的多个处理程序或者并行运行多个runnable的单个处理程序会更好吗?
我知道下面的实现实际上不会同时运行并且由于runnable1中的指令可能比runnable2长(因此runnable1执行时间+ 3000)vs(runnable2 time + 6000)等而被抵消但是,让我们说3000和6000是计算时间的替代品,使其每三秒钟运行一次(取下一个间隔[例如00:00:03.000,00:00:06.000]和当前时间的毫秒差异)。 / p>
private Handler handler1 = new Handler();
private Handler handler2 = new Handler();
protected void onStart() {
super.onStart();
Runnable runnableH1 = new Runnable() {
@Override
public void run() {
/* playSound A,B,C, etc every three seconds */
handler1.postDelayed(this, 3000);
}
}
};
Runnable runnableH2 = new Runnable() {
@Override
public void run() {
/* change GUI A,B,C, etc every six seconds */
handler2.postDelayed(this, 6000);
}
}
};
handler1.postDelayed(runnableH1, 0);
handler2.postDelayed(runnableH2, 0);
}
VS
private Handler handler1 = new Handler();
protected void onStart() {
super.onStart();
Runnable runnable1 = new Runnable() {
@Override
public void run() {
/* playSound A,B,C, etc every three seconds */
handler1.postDelayed(this, 3000);
}
}
};
Runnable runnable2 = new Runnable() {
@Override
public void run() {
/* change GUI A,B,C, etc every six seconds */
handler1.postDelayed(this, 6000);
}
}
};
handler1.postDelayed(runnable1, 0);
handler1.postDelayed(runnable2, 0);
}
我知道有类似的问题: Android: one handler for all runnables? 但是答案说你从我阅读Android文档时只能使用一个处理程序,听起来你可以实现多个处理程序没有问题(否则IDE会抱怨,它不会抱怨)有多个线程。
答案 0 :(得分:2)
如果你最后使用处理程序进行的操作是更改视图或将添加到主UI的任何其他任务,那么你可以将一个处理程序附加到主Looper上,这并不重要。或者其中几个,最后所有的处理程序(或你的单个处理程序)都将消息传递到一个队列中,#34;主线程UI队列",所以,没有真正的优势来自"并行/多线程"立场。
就个人而言,我会避免使用多个处理程序,因为它容易出错并且泄漏的可能性更高......
另一方面,如果你没有将你的消息推送到主线程,而你只是并行做一些工作,那么有几个线程是可行的,不一定是几个处理程序,因为你实际上没有#39除非你需要在主线程中发布一些内容,否则确实需要它们。
希望它有所帮助!
此致