Java Android服务初始化。我应该使用线程吗?

Java Android服务初始化。我应该使用线程吗?,java,android,multithreading,service,Java,Android,Multithreading,Service,我正在编写一个简单的Android服务,它将完成一些文件IO密集型工作。 该服务将在后台运行一段时间,初始化该服务将需要一段时间。(由于要扫描的文件较多,因此需要更长的时间) 所以我认为应该使用线程来初始化服务,因为服务是在UI线程上运行的。这是个好主意吗 我是否应该通过调用join()方法等待初始化线程结束并执行更多耗时更少的作业 我尝试使用线程进行初始化的原因是,我不希望启动服务的活动在服务启动时挂起 更新 好的,我尝试使用服务的原因是为外部客户端(如web浏览器或PC客户端)提供访问我的a

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

  • 所以我认为应该使用线程来初始化服务,因为服务是在UI线程上运行的。这是个好主意吗
  • 我是否应该通过调用join()方法等待初始化线程结束并执行更多耗时更少的作业
  • 我尝试使用线程进行初始化的原因是,我不希望启动服务的活动在服务启动时挂起

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

    你真的需要服务吗?如果您的代码将在服务中完成大量工作,那么最好在线程中完成。如果您真的不需要该服务,请考虑使用异步任务

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


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

    “服务在UI线程上运行”您对此有参考吗?@K-ballo“请注意,服务与其他应用程序对象一样,在其宿主进程的主线程中运行。“发件人”。@Eric:但服务没有任何UI…@K-ballo Well。。。是的,但是UI也在“主线程”上运行,所以它被称为“UI线程”。@Eric main thread,UI thread我认为它们可以一起使用,如果应用程序(包括活动和服务)同时运行服务和活动,则会出现阻塞(或忙)服务会使活动无响应,对吗?+1,您应该按照此建议“将做一些文件IO密集型工作”。服务用于其他,您需要AsyncTask以确保不应将IntentService仅用于短期操作?不,它旨在与任何其他服务一样使用。它只是简化了在另一个线程中运行它(并在完成时停止自己)。