我想要做的事情在理论上听起来非常简单 - 我需要扫描设备中存在的所有MP3文件,并通过查询AcoustId或GraceNote之类的内容来执行一些元数据更新。
我计划通过扩展IntentService
来使用类,而在onHandleIntent()
中,我计划创建N个线程,每个线程更新单个文件的元数据。我使用IntentService
的主要原因是我不需要与UI线程进行通信,并且手头的任务相对耗时。
我的主要问题是:IntentService是否支持自定义线程?如果没有,我最好的选择是什么?我知道我不应该使用AsyncTask
,因为它们仅用于相对较小的计算。
提前致谢!
答案 0 :(得分:2)
不,Service
只有一个工作线程,按顺序处理传入的Intent。如果你想做一些更复杂的事情,你应该扩展hexNum.insert(0, 1, hexConverstion[remainder]);
。
答案 1 :(得分:1)
产生N个线程从来不是一个好主意,特别是当你的任务列表没有绑定时(谁知道你有多少个mp3轨道)
您可以使用的便利之一是Android的threadpool,它将为您提供并行水平,但也有一些理智的界限
请注意,AsyncTask不适用于需要运行数分钟或数小时的smth,但一两个http查询可以完全在推荐的“几秒钟”时间范围内进行
最重要的是,您描述的所有操作都是I / O,如果您可以访问异步I / O api,则根本不需要额外的线程,所有线程都只是在等待网络或文件系统访问,太浪费了。如果您能够负担得起(和学习)AsynchronousFileChannel和AsyncHttpClient,那么它可能会对您的应用的质量和可扩展性产生重大影响