假设我希望我的应用程序将数据从在线数据库同步到本地数据库,我知道服务是要寻找的组件。
如果我启动一个普通服务,我知道它在主线程中启动,并且我运行的任何耗时任务都会阻塞 UI。这意味着我必须使用 AsyncTask 之类的东西来完成工作。
另一方面,如果我使用 Intent 服务,我知道它在并行线程上运行,并且如果我运行长时间任务,UI 不会被阻塞。 我调用的任何其他 Intent 服务都将排队。
但是如果我从 IntentService 创建并行线程来进行网络调用,会发生什么情况?
Intent 服务会等待我的网络调用完成,还是会在并行线程中进行调用并执行队列中的下一个 Intent 服务?
最佳答案
仅在 Service
的主 (UI) 线程上调用生命周期调用(例如:onCreate()
、onStartCommand()
) >。如果您有后台 Activity ,您可以在 onStartCommand()
中启动您自己的后台线程。您不需要为此使用 IntentService
。
IntentService
是具有特定行为的 Service
的特定实现。您可以通过调用 startService()
并传递描述要完成的工作的 Intent
来向其发送“工作”。 IntentService
运行直到所有排队的“工作”完成,然后自行关闭。 IntentService
只是常规 Service
之上的一个薄层,用于处理“工作”的排队、后台线程中“工作”的执行以及自动关闭IntentService
的。如果这不完全是您想要的行为,则不应尝试使用 IntentService
,因为它并不适合所有情况。自己在 Service
中启动后台线程并不困难。
关于android - 从 IntentService 运行一个新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46843913/