2012-12-28 48 views
0

我正在编写一个简单的Android服务,它将执行一些文件IO密集型工作。 该服务将在后台运行一段时间,初始化该服务将需要一段时间。 (由于有更多的文件需要扫描,所以需要更长的时间)。Android服务初始化。我应该使用线程吗?

  1. 所以我认为我应该使用线程来初始化服务,因为服务在UI线程上运行。这是个好主意吗?
  2. 我是否应该通过调用join()方法等待初始化线程结束并执行更少耗时的作业?

我尝试使用线程进行初始化的原因是因为我不希望我的服务在启动时启动服务来挂起。

更新 好吧,我试图用一个服务的原因是为外部客户端的手段(如Web浏览器或PC客户端)来访问我的Android手机的文件。我还希望允许服务在应用程序转到后台时继续运行。

+0

_“服务在UI线程上运行”_你有参考吗? –

+1

@ K-ballo“*请注意,与其他应用程序对象一样,服务在其宿主进程的主线程中运行。*”来自[文档](http://developer.android.com/reference/android/app/ Service.html)。 – Eric

+0

@Eric:但服务没有任何_UI _... –

回答

1

你真的需要服务吗?如果你的代码会在服务中做很多工作,那么在一个线程中执行它总是一个好主意。如果你真的不需要服务,可以考虑使用AsyncTask。

注意:服务在其宿主进程的主线程中运行 - 服务不会创建自己的线程,也不会在单独的进程中运行(除非另有指定)。这意味着,如果您的服务将执行任何CPU密集型工作或阻止操作(如MP3播放或网络连接),则应在服务中创建一个新线程来完成此项工作。通过使用单独的线程,您将降低应用程序无响应(ANR)错误的风险,并且应用程序的主线程可以保持专用于用户与您的活动进行交互。

http://developer.android.com/guide/components/services.html

+0

+1,你应该按照这个建议去做“会做一些文件IO密集型工作”,服务是其他的,你肯定需要AsyncTask – 2012-12-28 18:23:45

1

看看IntentService。它会在一个单独的线程中自动运行,并在完成工作时退出。似乎它适合你的情况。

+0

IntentService不应该只用于短操作吗? – David

+0

不,它的用途与其他服务一样。它只是简化了在另一个线程中运行它(并在完成时自行停止)。 – Ralgha

相关问题