В соответствии с инструкцией по настройке здесь, в примерном приложении, A) я создал класс, который extends класс услуг firebase. B) Я помещал эти классы в AndroidManifest.xml
A) Класс Java
public class MyFirebaseMessagingService extends FirebaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        //a) What the life cycle of the service? How can I ensure this method is getting called?
        //b) If the service is killed at some point, will system restart it on receiving new messages?
        Log.d(TAG, "From: " + remoteMessage.getFrom());
    }
}
B) AndroidManifest.xml
<service
    android:name=".MyFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>
Затем приложение может получать уведомления от FCM!
Вот мой вопрос:
-  
Кто начал службу уведомления FirebaseMessagingService? Должно быть какое-то место, вызывающее startService(), не так ли?
 -  
Я понимаю, что уведомление о нисходящем потоке будет доставляться на мое мобильное устройство google play, независимо от состояния моего приложения. Затем, насколько я могу гарантировать, что мой
onMessageReceive()вызывается, когдаappилиserviceестьswipe closed/killed/force stop? Является ли соответствующее поведение документированным где угодно? 
ИЗМЕНИТЬ:
-  Меня больше беспокоит следующий случай. Расскажите о 
data message. (по сравнению сnotification message.) Мое клиентское приложение получило сообщение FCM и отобразило уведомление по умолчанию, поскольку служба воспроизведения Google запущена и отправляет ее на системный трей. Но мойonMessageReceive()не вызывается, потому чтоMyFirebaseMessagingServiceубит системой и не перезапускается. Является ли это возможным?