我正在使用inexactRepeating
启动pendingIntent
的警报管理器。
效果很好 - 唯一的问题是,每次启动应用程序时,onDestroy
之后服务都在运行(即方向更改,最近手动滑动应用程序)。
我将它设置为20分钟的间隔,只要我不打开应用程序就行了 - onCreate
会自动启动服务,从而搞砸我的时间。该服务仅通过警报管理器调用一次。
如何检查应用是否需要运行它?布尔值是在共享首选项中的服务内部运行吗?
答案 0 :(得分:2)
您可以将AlarmManager
放在应用程序启动期间Application类创建一次的类中。然后,您将确保您的应用仅在首次启动时创建AlarmManager
的一个实例。
换句话说,创建一个扩展Application
的类,并在其onCreate()中创建一个AlarmManager类的实例,并将该实例存储在该Application类中。在包含AlarmManager的类中,在其构造函数中创建一个新的AlarmManager实例。然后在Application
类中,您可以创建一个getter方法,以便您的应用程序的任何其他活动或片段可以检索并使用该AlarmManager的一个实例。
请注意,对于是否应使用Application
类来存储全局应用程序状态,而不是静态单例,有一些debate。
答案 1 :(得分:2)
最佳答案来自此网站:
How to check if AlarmManager already has an alarm set?
我们的想法是使用布尔值来确定警报是否已经设置:
boolean alarmUp = (PendingIntent.getBroadcast(context, MyApp.TIMER_1, i,
PendingIntent.FLAG_NO_CREATE) != null);