2016-12-31 117 views
-1

我想要做的事理论上听起来很简单 - 我需要扫描设备中存在的所有MP3文件,并通过查询诸如AcoustIdGraceNote之类的内容来执行元数据更新。在IntentService中启动多线程

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

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

在此先感谢!

回答

2

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

+0

没有什么能阻止笔者从产卵自己的线程虽然 –

+1

@OlegBogdanov - 除非你延长'IntentService'中,服务在完成'onHandleIntent'后立即停止,使其成为产生自己线程的可怕选择。 – ianhanniballake

1

产卵N个线程永远听起来像一个伟大的想法,尤其是当你的任务列表是未绑定的(谁知道有多少MP3曲目你有)

一个可以使用的便利的是Android的threadpool,这将使你级并行的,但也有一些理智的界限

注意AsyncTask不用于不便需要几分钟或几个小时,但一个或两个HTTP查询的运行完全可以使其在推荐“几秒钟的时间内

最重要的是这个您所描述的所有操作都是I/O,如果您有权访问异步I/O API,则根本不需要额外的线程,所有线程只会等待网络或文件系统访问,因此非常浪费。如果你能负担得起使用(与学习)AsynchronousFileChannelAsyncHttpClient它可以使在质量和可扩展性方面很大的区别你的应用程序

+1

谢谢奥列格,我一定会阅读上述材料。 –