有关Android后台服务的基本和常见疑问

问题描述

我对Android的后台服务有某些疑问:-
1)。我正在创建一个需要定期在后台执行一些工作的应用程序。在后台,我的意思是即使关闭了应用程序(从App Drawer刷过或重启了电话或其他任何东西)。那么实现此目标的最佳方法是什么?我擅长在Android和Flutter中进行编码。因此,即使是高层次的概述也将有所帮助。
2)。解决方案会消耗大量电池吗?还是像WhatsApp或其他会定期发出通知的应用程序一样?

如果提供的解决方案与最新版本的Android完美搭配,将非常有帮助。
谢谢。

解决方法

基本上没有可靠的方法来执行后台作业。 但是有一些解决方法。

这是我的解决方案:

在您的课堂上扩展应用程序:

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,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" />

然后在应用程序的onCreate中调用startBackService()