问题描述
我对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()