默认情况下,FirebaseMessagingService 运行 是否在后台?

Does FirebaseMessagingService run in the background by default?

背景中的 FirebaseMessagingService 运行 是否类似于 IntentService 的操作方式?

我看到 FirebaseMessagingService extents Service 而不是 运行 在后台,但我想确定我是否应该在里面做任何工作FirebaseMessagingService 异步或同步。

谢谢

答案:

FirebaseMessagingService 的方法 onMessageReceived(RemoteMessage message) NOT 在主线程上调用 - 所以所有工作都应该是同步的。

一个Service没有"run in the background"。 Service 只是 class 的一个实例(即:一个对象)。 Service 的方法可以 运行 在主 (UI) 线程或后台(辅助)线程上 。这完全取决于如何称呼它们。

服务onCreate()onStartCommand()onDestroy()的生命周期方法都是在主(UI)线程上调用的。但是在您的 Service 中,您可以启动其他线程并在这些线程上执行其他操作。

FirebaseMessagingService 的方法 onMessageReceived(RemoteMessage message) 被称为 "in the background"(不在 UI/Main 线程上)。如果您尝试在 onMessageReceived(RemoteMessage message) 中执行异步工作,您将收到一条错误消息:

Method execute must be called from the main thread, currently inferred thread is worker.

所以在 onMessageReceived(RemoteMessage message) 中完成的所有工作都应该同步完成,因为它在自己的后台工作线程中。