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