我想请某人解释一下,HandlerThread和IntentService之间的主要区别是什么,以及主要的用例场景是什么?
我知道HandlerThread包含一个Looper,它管理messageQueue,由Handler提供。据我所知,你可以推送HandlerThread的任务,它将执行。使用非UI相关的长时间运行操作非常棒,您可以通过runOnUiThread()将结果推送回UI。
相比之下,IntentService适用于长时间运行,非uUI相关的操作,可以按顺序执行任务,当它完成调用selfStop()的作业以完成关闭时。如果一个IntentService正在处理一个任务,当一个新请求到达它时,它会添加到队列并处理第二个,当它完成第一个任务时。
从我的观点来看,他们以同样的方式做同样的工作。假设我有一个应用程序,用户点击按钮,我开始下载文件。如果用户多次点击,则新任务将排队,仅在第1次完成时启动第2次。我该怎么用? IntentService还是HandlerThread?
因此,在检查HandlerThread和IntentService的源代码后,我发现了以下内容:
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的组合。
任何进一步的答案和解决方案都非常受欢迎!
如果用户多次点击,则新任务将排队,仅在第1次完成时启动第2次。我该怎么用?
IntentService和HandlerThread都可以做到这一点。在HandlerThread中,您可以通过使用处理程序来完成它,但是在IntentService的情况下,它可以自己管理。
IntentService还是HandlerThread?
您是一个下载文件的示例,但在这种情况下,用户也想要停止它。在这种情况下,您无法使用IntentService以正确的方式执行此操作,因为在下载之间没有任何官方方法可以阻止它(它将在下载后自动停止)。因此,您必须继续使用HandlerThread和Service。但是,如果您的情况不是那样,那么您可以使用IntentService,因为它易于实现,您无需管理自己。