在IntentService中启动多个线程

时间:2016-12-31 05:02:37

标签: android multithreading intentservice

我想要做的事情在理论上听起来非常简单 - 我需要扫描设备中存在的所有MP3文件,并通过查询AcoustIdGraceNote之类的内容来执行一些元数据更新。

我计划通过扩展IntentService来使用类,而在onHandleIntent()中,我计划创建N个线程,每个线程更新单个文件的元数据。我使用IntentService的主要原因是我不需要与UI线程进行通信,并且手头的任务相对耗时。

我的主要问题是:IntentService是否支持自定义线程?如果没有,我最好的选择是什么?我知道我不应该使用AsyncTask,因为它们仅用于相对较小的计算。

提前致谢!

2 个答案:

答案 0 :(得分:2)

不,Service只有一个工作线程,按顺序处理传入的Intent。如果你想做一些更复杂的事情,你应该扩展hexNum.insert(0, 1, hexConverstion[remainder]);

答案 1 :(得分:1)

产生N个线程从来不是一个好主意,特别是当你的任务列表没有绑定时(谁知道你有多少个mp3轨道)

您可以使用的便利之一是Android的threadpool,它将为您提供并行水平,但也有一些理智的界限

请注意,AsyncTask不适用于需要运行数分钟或数小时的smth,但一两个http查询可以完全在推荐的“几秒钟”时间范围内进行

最重要的是,您描述的所有操作都是I / O,如果您可以访问异步I / O api,则根本不需要额外的线程,所有线程都只是在等待网络或文件系统访问,太浪费了。如果您能够负担得起(和学习)AsynchronousFileChannelAsyncHttpClient,那么它可能会对您的应用的质量和可扩展性产生重大影响