Android后台服务、警报和在应用程序重启后保留对象引用
我正在开发一个小的Android应用程序,它需要运行一个后台进程,用于定期启动远程连接,例如,检查服务器上是否有新数据。如果应用程序活动目前未运行,则显然也需要执行此过程 正如我在文档中看到的,有两种方法可以在Android中开发定时后台进程,在应用程序关闭时也可以工作 服务 警报 第一个对我的要求不是很好,因为它可能会在内存不足的情况下被操作系统杀死,所以对我来说是无用的。startForeground不是很好,因为我希望过程是静默的 警报是正常的,因为它不能被操作系统杀死,所以它可以无限期地工作。但是如果我使用AlarmManager计划了一个意图,那么如何在应用程序重新启动时保留对该意图的引用 例如,如果我想取消或重新安排报警,我需要通过AlarmManager.cancelIntent I方法引用取消报警的初始意图。但是,如果应用程序由用户重新启动,我如何获得用于启动警报的初始意图的引用Android后台服务、警报和在应用程序重启后保留对象引用,android,android-service,alarmmanager,Android,Android Service,Alarmmanager,我正在开发一个小的Android应用程序,它需要运行一个后台进程,用于定期启动远程连接,例如,检查服务器上是否有新数据。如果应用程序活动目前未运行,则显然也需要执行此过程 正如我在文档中看到的,有两种方法可以在Android中开发定时后台进程,在应用程序关闭时也可以工作 服务 警报 第一个对我的要求不是很好,因为它可能会在内存不足的情况下被操作系统杀死,所以对我来说是无用的。startForeground不是很好,因为我希望过程是静默的 警报是正常的,因为它不能被操作系统杀死,所以它可以无限期地
如果启动应用程序已重新启动,是否有其他方法停止报警?是的,请注意,“取消”查找的是挂起事件,而不是意图本身 所以 把你带到你想去的地方
请注意,我并没有得到那个字符串,因为我想要一个唯一的Id/请求代码来实现这个目的,我不会搞砸复制粘贴;在InititalIntent中创建报警时,我引用了相同的数字。刚刚回答了这个问题,这里:
只需取消您计划的意图关于报警,您可以使用意图特征取消,因此您不需要引用原始意图。无论如何,警报机制仍然需要您在服务上运行一些东西 无论如何,您错过了另一个可能的解决方案:。它的目的是与服务器同步,但是你可以在代码中做任何你想做的事情,而且与你提到的其他解决方案相比,操作系统不太可能杀死它
遗憾的是,即使是现在它也缺少文档和样本,但我认为它可以满足您的需求。我发现只要服务器上有新的内容可用,您最好利用GCM推送通知。我正在开发类似的应用程序,其中数据可以从生产者一侧推送到消费者应用程序
您需要查看BroadcastReceiver和GCM特定的通信模型。希望这有助于在内存不足的情况下消除报警。事实上,你的整个应用程序都可以。您无法防止在内存不足时被杀死。的可能重复
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, R.string.some_string, new Intent(this, InitialIntent.class), 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);