gpt4 book ai didi

java - 对于大致同时为 : multiple Handlers with single Runnable each, 的指令或具有多个 Runnable 的单个处理程序,哪个更好?

转载 作者:行者123 更新时间:2023-11-30 09:05:04 36 4
gpt4 key购买 nike

因此,我希望在尝试保持轻资源负载的同时同时完成几件事。例如,同时播放声音和更新 GUI。让多个处理程序具有单个可运行对象或单个处理程序具有多个并行运行的可运行对象更好吗?

我知道下面的实现实际上不会同时运行并且由于 runnable1 中的指令可能比 runnable2 更长因此(runnable1 执行时间 + 3000)与(runnable2 时间 + 6000)等而被抵消. 但我们只是说 3000 和 6000 是计算时间的替代品,使其每三秒运行一次(取下一个间隔的毫秒差 [例如 00:00:03.000、00:00:06.000] 和当前时间)。

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);
}

对比

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 会提示,但它没有)有多个线程。

最佳答案

如果最后你对处理程序所做的只是更改 View 或将添加到主 UI 的任何其他任务并不重要,你可以将一个处理程序附加到主 Looper 和/或多个其中,最终您的所有处理程序(或您的单个处理程序)都会将消息传送到单个队列,“主线程 UI 队列”,因此,从“并行/多线程”的角度来看,没有真正的优势。

就我个人而言,我会避免使用多个处理程序,因为这很容易出错并且发生泄漏的可能性更高...

另一方面,如果您没有将消息推送到主线程,而只是并行地做一些工作,那么多个线程是可行的方法,不一定是多个处理程序,因为您实际上不需要除非您需要将某些内容发布到主线程中,否则确实需要它们。

希望对您有所帮助!

问候

关于java - 对于大致同时为 : multiple Handlers with single Runnable each, 的指令或具有多个 Runnable 的单个处理程序,哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24964411/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com