在内部启动多个线程和 IntentService

Launching mutliple threads inside an IntentService

理论上我想做的事情听起来很简单 - 我需要扫描设备中存在的所有 MP3 文件,并通过查询 AcoustId or GraceNote.

之类的内容来执行一些元数据更新

我计划通过扩展 IntentService 使用 class,在 onHandleIntent() 中,我计划创建 N 个线程,每个线程更新单个文件的元数据.我使用IntentServices的主要原因是不需要和UI线程通信,手头的任务比较耗时。

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

提前致谢!

不,IntentService 只有一个工作线程,按顺序处理传入的 Intent。如果你想做更复杂的事情,你应该扩展 Service

产生 N 个线程从来都不是一个好主意,尤其是当你的任务列表未绑定时(谁知道你有多少 mp3 曲目)

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

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

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