gpt4 book ai didi

android - 如果服务未与 AlarmManager 一起运行,则启动服务

转载 作者:行者123 更新时间:2023-11-30 03:47:58 25 4
gpt4 key购买 nike

我有一个由 AlarmManager 启动的服务,喜欢这个

Intent in = new Intent(SecondActivity.this,BotService.class);
PendingIntent pi = PendingIntent.getService(SecondActivity.this, 9768, in,PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager alarms = (AlarmManager) SecondActivity.this.getSystemService(Context.ALARM_SERVICE);
alarms.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),pi);

当服务启动时,它会再次设置 AlarmManager,我这样做是因为我需要随机间隔的重复服务。

这是这样做的:

Intent in = new Intent(BotService.this, BotService.class);
PendingIntent pi = PendingIntent.getService(BotService.this, 9768,
in, PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager alarms = (AlarmManager) BotService.this.getSystemService(Context.ALARM_SERVICE);
alarms.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis()+ (attack_interval * MINS) + attack_interval_min, pi);

我的服务可能会持续一段时间,如果服务没有运行,如何通过AlarmManager启动服务?

如果它正在运行,我需要再次设置 AlarmManager,否则我的服务将无法再次启动。谢谢您的回答。如有不明之处请追问。

最佳答案

你可能想要实现一个 IntentService反而;如果该方法适合您的需求,您将摆脱所有生命周期的麻烦。

还有,你为什么不通过 setInexactRepeating 设置重复闹钟呢?或设置重复?当然,只有当您确定您的 IntentService 运行时间永远不会超过警报间隔时,或者如果您有另一种合理的机制可以在您的 IntentService 仍在运行时忽略警报,您才会这样做。

更新:如果您还询问如何最初启动您的服务...好吧,这取决于。许多人将 BOOT_COMPLETED 广播视为解决所有问题的方法。但是,它会阻止用户将您的应用程序移动到 SD 卡。如果您可以忍受仅在您的应用程序运行后重复运行您的服务,则您的应用程序可以启动它。否则,如果您查看系统发送的哪些其他事件可能与您的服务相关,例如互联网连接的变化,您仍然可以避免 BOOT_COMPLETED 陷阱。如果您决定使用 BOOT_COMPLETED,您可以找到一个示例 here .

关于android - 如果服务未与 AlarmManager 一起运行,则启动服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14643028/

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