首页 > 解决方案 > 关于Android后台服务的基本&常见疑问

问题描述

我对 Android 中的后台服务有一些疑问:-
1)。我正在创建一个需要定期在后台做一些工作的应用程序。通过背景,我的意思是即使应用程序关闭(从应用程序抽屉或手机重新启动或任何东西刷卡)。那么实现这一点的最佳方法是什么?我擅长在 Android 和 Flutter 中编码。因此,即使是高级别的概述也会有所帮助。
2)。该解决方案是否会消耗大量电池电量,还是会像 WhatsApp 或其他定期发送通知的应用程序一样?

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

标签: androidfluttermobile-application

解决方案


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

这是我的解决方案:

在您的类扩展应用程序中:

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


推荐阅读