Keeping alive Intent Service after application is

2020-08-13 07:40发布

问题:

I have intent service in my app. This service has some job to do - uploading some files. It runs only when there is something to do.

Service won't upload when some conditions are met, for example no Internet connection. For that reason it registers itself to on broadcast receiver to receive message about Internet connection changes.

The problem is that service is killed with app even if it is doing something, for example:

  1. App is sending intent to service
  2. Service started uploading something, everything fine
  3. X% uploaded, app is killed, service is killed
  4. Internet connection changed - service is woken up.

If service is woken up after app is killed, why is it killed with the app? Is there any way to prevent killing service when app is killed?

I'm killing app manually. I know android could kill my service anytime and I don't want to prevent it. I just want to have this service running after user closed or killed app.

回答1:

"It runs only when there is something to do." only theoretically :) - maybe that is you what you want to achieve.

"The problem is that service is killed with app even if it is doing something, for example:" Of course, there will be cases when the user action will end your Service or Intent service. This is a fail answer.

"Is there any way to prevent killing service when app is killed?" It is just watch for "parental control" task protection" keywords in Google!



回答2:

Because you used an intentService that mean the intentService will destroy once the activty destroy so you have to use Service instead of intentService, so you can uplaod your file in the backgroud.

According to manipuation between the Service and the activty via broadcast receiver or to bind the service to activty.

Edit :

The Service may be triggered from any thread.

The IntentService must be triggered from Main Thread.



回答3:

If you don't mind showing notification (in your case, you can for example show notification with upload progress), then in your IntentService (or Service) you can call:

startForeground(int id, Notification notification)

This should prevent killing your service when your application is killed.

From documentation: "You can set this flag if killing your service would be disruptive to the user, such as if your service is performing background music playback, so the user would notice if their music stopped playing."