默认情况下,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)
中完成的所有工作都应该同步完成,因为它在自己的后台工作线程中。
背景中的 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)
中完成的所有工作都应该同步完成,因为它在自己的后台工作线程中。