gpt4 book ai didi

android - 重启手机后服务停止

转载 作者:行者123 更新时间:2023-11-29 21:05:29 25 4
gpt4 key购买 nike

我有一项从 AlarmManager 运行的服务设置为定期记录传感器数据。

我有一个问题,每次启动/运行应用程序时,打开应用程序都会在它的 onCreate 中执行服务。因此,我实现了以下操作以确保它仅按规定的时间间隔运行:

        Intent intent = new Intent(getApplicationContext(), Service.class );
AlarmManager scheduler = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
//Boolean to see if alarm is already set:
alarmUp = (PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_NO_CREATE) != null);
//make pending intent to schedule
PendingIntent scheduledIntent = PendingIntent.getService(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

if (runOnce == false){

if (!alarmUp){
Log.d("alarmUp", "= false");
scheduler.setInexactRepeating(AlarmManager.RTC_WAKEUP, 900000, 900000, scheduledIntent);
}
runOnce = true;
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(RUN_ONCE, runOnce);
editor.commit();
}
//Alarm Manager schedule Start Service:
if (alarmUp){
Log.d("alarmUp", "= true");
// 15 min intervals = 900000
//scheduler.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 900000, scheduledIntent);
scheduler.setInexactRepeating(AlarmManager.RTC_WAKEUP, 900000, 900000, scheduledIntent);
}

我引入了 runOnce bool 值,因为 getBroadcast 要么始终运行该服务,要么在应用程序的全新安装时根本不启动它。这是解决方案,但会导致新问题 - 打开和关闭设备后,服务不会再次启动。

我该如何解决这个问题?我可以找到另一种方法来启动服务而不让它运行得太频繁,或者检查设备上次关闭的时间以重置 runOnce bool 值?

感谢您的任何建议。

最佳答案

How can I address this problem?

在重启后重新安排您的闹钟,使用 ACTION_BOOT_COMPLETED BroadcastReceiver,如 this sample project 中所示. AlarmManager 计划的事件不会在重启后继续存在,因此您必须自己重新建立它们。

顺便说一句,我建议在上面显示的代码中将 getApplicationContext() 替换为 this。只有当您知道在特定情况下应该使用 getApplicationContext()原因 时才使用 getApplicationContext()

关于android - 重启手机后服务停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24716101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com