0

我正在编写一个简单的 Android 服务,它将执行一些文件 IO 密集型工作。服务会在后台运行一段时间,初始化服务需要一段时间。(由于要扫描的文件更多,因此需要更长的时间)。

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

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

更新 好的,我尝试使用服务的原因是为外部客户端(例如 Web 浏览器或 PC 客户端)提供访问我的 android 手机文件的方法。当我的应用程序进入后台时,我还希望允许服务继续运行。

4

2 回答 2

1

你真的需要服务吗?如果您的代码将在 Service 中执行大量工作,那么在线程中执行它始终是一个好主意。如果您真的不需要该服务,请考虑使用 AsyncTask。

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

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

于 2012-12-28T18:21:02.993 回答
1

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

于 2012-12-28T18:21:11.477 回答