android - 从 IntentService 运行一个新线程

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

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

如果我启动一个普通服务,我知道它在主线程中启动,并且我运行的任何耗时任务都会阻塞 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/

相关文章:

android - 如何使用 Intent (Froyo) 启动 Android 日历应用程序

android - 从 AsyncTask 或服务通知 UI 组件的最佳实践

java - 将大写字符与小写字符匹配,Java

Android fragment 仅在手机锁定时提交非法状态异常

Android - 更改图库的位置和大小?

java - Android InputStream 无法接收来自蓝牙 HC-05 的完整消息

android - 即使应用程序从最近的抽屉中被杀死,也可以使用服务获取连续的位置

android - 是否可以重新创建 Activity 并保留运行时实例?

java - Android 将字符串从一个 Activity 发送到另一个 Activity 不起作用

java - 我想对服务发出警报