从IntentService运行新线程

时间:2017-10-20 07:03:13

标签: android android-intent android-service intentservice android-intentservice

假设我希望我的应用程序将数据从在线数据库同步到本地数据库,我了解服务是要查找的组件。

如果我开始正常服务,我知道它从主线程开始,我运行的任何耗时的任务都会阻止UI。这意味着我将不得不使用类似AsyncTask的东西来完成工作。

另一方面,如果我使用Intent Service,我知道它在并行线程上运行,如果我运行一个长任务,UI就不会被阻止。 我打电话的任何其他意向服务都将排队等候。

但是如果我从IntentService创建一个并行线程来进行网络调用会发生什么?

意图服务是否会等待我的网络调用完成,还是会在并行线程中调用并执行队列中的下一个Intent服务?

1 个答案:

答案 0 :(得分:1)

仅在onCreate()的主(UI)线程上调用生命周期调用(例如:onStartCommand()Service)。如果您有后台活动,则可以在onStartCommand()中启动自己的后台线程。您无需使用IntentService

IntentService是具有特定行为的Service的特定实现。您通过调用startService()并传递描述要完成的工作的Intent来发送“工作”。 IntentService一直运行,直到所有排队的“工作”完成,然后自行关闭。 IntentService只是常规Service之上的一个thi8n层,用于处理“工作”的排队,后台线程中“工作”的执行以及{{1}的自动关闭}。如果这不是您想要的行为,则不应尝试使用IntentService,因为它不适合所有情况。 <{1}}自己启动后台线程并不困难。