Основные и распространенные сомнения относительно фоновых служб Android

#android #flutter #mobile-application

#Android #flutter #мобильное приложение

Вопрос:

У меня есть определенные вопросы относительно фоновых служб в Android:-
1). Я создаю приложение, которое периодически требует выполнения некоторой работы в фоновом режиме. Под фоном я подразумеваю, что даже если приложение закрыто (извлечено из ящика приложений или телефон перезагружен или что-то еще). Итак, каков наилучший способ реализовать это? Я хорош в кодировании как на Android, так и на Flutter. Так что даже обзор высокого уровня был бы полезен.
2). Будет ли решение потреблять много заряда батареи или оно будет таким же, как WhatsApp или другие приложения, которые регулярно отправляют уведомления?

Было бы очень полезно, если бы предоставленное решение отлично работало с последними версиями Android.
Спасибо.

Ответ №1:

В принципе, нет надежного способа выполнять фоновые задания. Но есть некоторые обходные пути.

Это мое решение:

В вашем приложении, расширяющем класс:

 private AlarmManager awakeAlarmMgr;
private PendingIntent awakeAlarmIntent;

public void startBackService() {
        
        Log.d(TAG,"BACK SERVICE STARTED")

           
        // START ALL SERVICES
        startStepService();
        startLocationService();
        setAllReminders();

        // SET AN ALARM TO KEEP ALL SERVICES ALIVE
        startStayAwakeAlarm();
       
    }


private void startStayAwakeAlarm() {

        awakeAlarmMgr = (AlarmManager) getSystemService(ALARM_SERVICE);

        if(awakeAlarmIntent!=null)
            awakeAlarmMgr.cancel(awakeAlarmIntent);

        Intent intent = new Intent(context, StayAwakeReceiver.class);
        awakeAlarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

        awakeAlarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                SystemClock.elapsedRealtime()   AlarmManager.INTERVAL_HALF_HOUR,
                AlarmManager.INTERVAL_HALF_HOUR, awakeAlarmIntent);
    }

  

В StayAwakeReceiver.java:

 public class StayAwakeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        Log.d(TAG,"STAY AWAKE!!!");

        AppController.getInstance().startBackService();

    }
}
  

Не забудьте объявить получателя в своем манифесте:

         <receiver android:name=".receiver.StayAwakeReceiver" />
  

И вызов startBackService() в onCreate вашего приложения

Комментарии:

1. Я знаю об этом. По сути, эта служба завершается после завершения назначенной работы, и чтобы сохранить ее, мы просто перезапускаем ее, верно? Я предполагаю, что есть лучший способ для этого.