Why does the background service stops while running?

前端 未结 4 1447
别跟我提以往
别跟我提以往 2021-01-23 08:10

I have a background service in my android application.In which a thread listening recent tasks running frequently.My service overrides both onCreate() and onS

4条回答
  •  情书的邮戳
    2021-01-23 08:25

    I met the same issue. On some devices after a while Android kills my service and even startForeground() does not help. And my customer does not like this issue.

    I use SharedPreferences to keep the flag whether the service should be running. Also I use AlarmManager to create a kind of watchdog timer. It checks from time to time if the service should be running and restart it.

    Creating/dismissing my watchdog timer:

    void setServiceWatchdogTimer(boolean set, int timeout)
    {
        Intent intent;
        PendingIntent alarmIntent;
        intent = new Intent(); // forms and creates appropriate Intent and pass it to AlarmManager
        intent.setAction(ACTION_WATCHDOG_OF_SERVICE);
        intent.setClass(this, WatchDogServiceReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager am=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
        if(set)
            am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeout, alarmIntent);
        else
            am.cancel(alarmIntent);
    }
    

    Receiving and processing the intent from the watchdog timer:

    /** this class processes the intent and
     *  checks whether the service should be running
     */
    public static class WatchDogServiceReceiver extends BroadcastReceiver
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
    
            if(intent.getAction().equals(ACTION_WATCHDOG_OF_SERVICE))
            {
                // check your flag and 
                // restart your service if it's necessary
            }
        }
    }
    

    Indeed I use WakefulBroadcastReceiver instead of BroadcastReceiver. I gave you the code with BroadcastReceiver just to simplify it.

提交回复
热议问题