假设我希望我的应用程序将数据从在线数据库同步到本地数据库,我了解服务是要查找的组件。
如果我开始正常服务,我知道它从主线程开始,我运行的任何耗时的任务都会阻止UI。这意味着我将不得不使用类似AsyncTask的东西来完成工作。
另一方面,如果我使用Intent Service,我知道它在并行线程上运行,如果我运行一个长任务,UI就不会被阻止。 我打电话的任何其他意向服务都将排队等候。
但是如果我从IntentService创建一个并行线程来进行网络调用会发生什么?
意图服务是否会等待我的网络调用完成,还是会在并行线程中调用并执行队列中的下一个Intent服务?
答案 0 :(得分:1)
仅在onCreate()
的主(UI)线程上调用生命周期调用(例如:onStartCommand()
,Service
)。如果您有后台活动,则可以在onStartCommand()
中启动自己的后台线程。您无需使用IntentService
。
IntentService
是具有特定行为的Service
的特定实现。您通过调用startService()
并传递描述要完成的工作的Intent
来发送“工作”。 IntentService
一直运行,直到所有排队的“工作”完成,然后自行关闭。 IntentService
只是常规Service
之上的一个thi8n层,用于处理“工作”的排队,后台线程中“工作”的执行以及{{1}的自动关闭}。如果这不是您想要的行为,则不应尝试使用IntentService
,因为它不适合所有情况。 <{1}}自己启动后台线程并不困难。