android - 关于Android后台服务的基本&常见疑问
问题描述
我对 Android 中的后台服务有一些疑问:-
1)。我正在创建一个需要定期在后台做一些工作的应用程序。通过背景,我的意思是即使应用程序关闭(从应用程序抽屉或手机重新启动或任何东西刷卡)。那么实现这一点的最佳方法是什么?我擅长在 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, 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
推荐阅读
- c# - 只允许某些类编辑某些属性
- c++ - avcodec_receive_packet 中的错误(gdi screenshot + ffmpeg)
- vba - AfterUpdate - 组合多个操作
- python - Python Regex 在交替运算符后没有组
- java - 如何将扫描仪中的每个单词存储到数组中
- nginx - 带有 socket.io 的 nginx 镜像
- json - 子选择中的 JSON FOR PATH 仅返回唯一值
- javascript - 使用 $.each 解析字符串中的 unicode
- python - 如何将字典合并到具有特定格式的python中的嵌套字典中?
- java - 分配给 y 的值 x 从未在 switch 语句中使用?