Full Source Code: https://github.com/varunon9/DynamicWallpaper/tree/always_running_service
- Create a Foreground Service (MyService.java)
- Create a Manifest registered Broadcast Receiver (MyReceiver.java) which will start your Foreground Service
- In
onDestroy
lifecycle of MyService, send a broadcast intent to MyReceiver - Launch the MyService on app start from MainActivity (see step 8)
- With above 4 steps, MyService will always get re-started when killed as long as
onDestroy
of Service gets called onDestroy
method of Service is not always guaranteed to be called and hence it might not get started again- To overcome this step, register a unique periodic Background Job via WorkManager which will restart MyService if not already started
- Register this UniquePeriodicWork (this will run every ~16 minutes) from MainActivity and it will also be responsible for the first launch of MyService
The fact that it will appear again in a few seconds after being killed can indicate that is using Android Alarm Manager that executes periodically and checks if it needs to be relaunched. I do something similar but I'm not sure that the application that you mentioned is doing that after seeing his Android Manifest file.
You can see here the second service has an intent filter related with Firebase, so maybe it is restarted via FCM.