gpt4 book ai didi

android - HandlerThread vs Executor - 什么时候比另一个更合适?

转载 作者:IT老高 更新时间:2023-10-28 21:37:30 30 4
gpt4 key购买 nike

我只是好奇在某些时候我应该选择 Executor 而不是 HandlerThread。是否有时一个优于另一个,或者我真的应该坚持使用 HandlerThread?就我而言,我目前正在监听 ServerSocket 的连接,并在 Executor 创建的单独线程上处理每个请求。尽管我举了一个具体的例子,但我真的只是在寻找一种比另一种更合适的情况。不过,我欢迎对我的设计发表评论。

最佳答案

Executor 类更强大,可以使用线程池,而每个 Handler 引用单个线程。 Executor 允许您获取所有计划任务并根据需要取消它们。另一方面,处理程序不会回答简单的问题,例如有多少任务正在等待或给我所有等待任务的引用。我认为 Handler 受到更多限制的一个原因是,Android 允许您访问它用于 UI 的主 Handler,如果您开始取消操作系统任务,您可能真的会搞砸操作系统。

一般来说,如果您需要一个线程池或大量功能,请使用 Executor。如果您只需要一个好的后台线程来一次运行一个任务,请使用处理程序。例如,当我想查询我的数据库时,我真的只希望一次发生一个查询并且我不想生成 ANR,因此我使用在后台线程上运行的 Handler 来运行我的查询。

我相信您选择的 executor 听起来很合适,因为您想同时处理多个传入请求,而 Handler 一次只能处理一个。

更新:如何创建在后台线程上运行的处理程序:

在您的构造函数或 onCreate 中编写以下内容,显然您可以将优先级设置为您喜欢的任何内容:

public class MyClass {

private Handler mBgHandler;

public MyClass() {
HandlerThread bgThread = new HandlerThread("My-Background-Handler");
bgThread.start();
mBgHandler = new Handler(bgThread.getLooper());
}
}

更新:完成后不要忘记 quit() 或 quitSafely() HandlerThread,否则它将永远等待

关于android - HandlerThread vs Executor - 什么时候比另一个更合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7462098/

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