FirebaseMessagingService在后台运行的方式是否与IntentService类似?我看到FirebaseMessagingService扩展了不在后台运行的Service,但我想确定我是否应该在FirebaseMessagingService中异步或同步地执行任何工作。
FirebaseMessagingService
IntentService
Service
vawmfj5a1#
FirebaseMessagingService的方法onMessageReceived(RemoteMessage message)被称为“在后台”(而不是在UI/主线程上)。如果你尝试在onMessageReceived(RemoteMessage message)中进行异步工作,你会收到一个错误消息:必须从主线程调用execute方法,当前推断线程是辅助线程。因此,在onMessageReceived(RemoteMessage message)中完成的所有工作都应该同步完成,因为它在自己的后台工作线程中。
onMessageReceived(RemoteMessage message)
djp7away2#
锁定5天。此时正在解决disputes about this answer’s content。它目前不接受新的交互。
Service不会“在后台运行”。一个Service只是一个类的示例(即:对象)。Service的方法可以在主(UI)线程或后台(worker)线程上运行。这一切都取决于他们如何被称为。服务onCreate()、onStartCommand()、onDestroy()的生命周期方法都在主(UI)线程上调用。但在Service中,您可以启动其他线程并在这些线程上执行其他操作。
onCreate()
onStartCommand()
onDestroy()
2条答案
按热度按时间vawmfj5a1#
FirebaseMessagingService
的方法onMessageReceived(RemoteMessage message)
被称为“在后台”(而不是在UI/主线程上)。如果你尝试在onMessageReceived(RemoteMessage message)
中进行异步工作,你会收到一个错误消息:必须从主线程调用execute方法,当前推断线程是辅助线程。
因此,在
onMessageReceived(RemoteMessage message)
中完成的所有工作都应该同步完成,因为它在自己的后台工作线程中。djp7away2#
锁定5天。此时正在解决disputes about this answer’s content。它目前不接受新的交互。
Service
不会“在后台运行”。一个Service
只是一个类的示例(即:对象)。Service
的方法可以在主(UI)线程或后台(worker)线程上运行。这一切都取决于他们如何被称为。服务
onCreate()
、onStartCommand()
、onDestroy()
的生命周期方法都在主(UI)线程上调用。但在Service
中,您可以启动其他线程并在这些线程上执行其他操作。