gpt4 book ai didi

android - HandlerThread 与 IntentService

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:06:21 24 4
gpt4 key购买 nike

我想请人解释一下,HandlerThread 和 IntentService 之间的主要区别是什么,主要用例场景是什么?

我知道 HandlerThread 包含一个 Looper,它管理由 Handler 提供的消息队列。据我了解,您可以为 HandlerThread 推送任务,它将执行。它非常适合用于非 UI 相关的长时间运行的操作,您可以通过 runOnUiThread() 将结果推送回 UI。

相比之下,IntentService 适用于长时间运行的非 UI 相关操作,可以按顺序执行任务,当它完成作业时调用 selfStop() 关闭自己完成。如果一个 IntentService 正在处理一个任务,当一个新的请求到达时,它会添加到队列中并处理第二个,当它完成第一个时。

在我看来,他们以完全相同的方式做同样的工作。假设我有一个应用程序,用户点击一个按钮,我开始下载一个文件。如果用户多次点击,一个新任务将进入队列,只有在第一个任务完成后才启动第二个任务。我应该使用什么? IntentService 还是 HandlerThread?

最佳答案

因此,在检查了 HandlerThread 和 IntentService 的源代码后,我发现了以下内容:

  • IntentServie 内部有一个 HandlerThread 实例(这是分离的工作线程)
  • IntentService 在执行 onHandleIntent() 方法后调用 selfStop() 以关闭自身(因为它扩展了服务类)。
  • IntentService 是从 Service 类本身扩展而来的,因此如果您愿意,可以在单独的进程中启动它。

IntentService onCreate() 方法,创建工作线程:

   @Override
public void onCreate() {
super.onCreate();
HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
thread.start();
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
}

IntentService 自己的处理程序,需要在工作完成后终止服务:

    private final class ServiceHandler extends Handler {
public ServiceHandler(Looper looper) {
super(looper);
}

@Override
public void handleMessage(Message msg) {
onHandleIntent((Intent)msg.obj);
stopSelf(msg.arg1);
}
}

在我的阅读中,IntentService 是 HandlerThread 和 Service 的组合。

非常欢迎任何进一步的答案和解决方案!

关于android - HandlerThread 与 IntentService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38924859/

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