Ale*_*ich 5 android android-intent android-alarms
我有一个Android应用程序,该应用程序具有在后台运行,与远程服务器通信并在需要时向用户显示通知的服务。该应用程序还具有供用户进行交互的活动。
要求之一是应用程序需要在早上自动启动。在一天结束时,用户可以自由退出该应用程序(退出功能可停止该服务,释放唤醒锁,并让Android终止进程)。为了自动重启应用程序,我正在使用AlarmManager和PendingIntent安排警报:
//create intent to alert OnStartReceiver when alarm goes off
Intent i = new Intent(context, OnStartReceiver.class);
i.setAction("com.pointtrace.intents.alarm");
i.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION|Intent.FLAG_FROM_BACKGROUND);
//wrap inside PendingIntent so that it can be used from outside
//our application
PendingIntent pi = PendingIntent.getBroadcast(context, 1, i, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarms = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Log.d("GXT", "Scheduling alarm action(i)=" + i.getAction());
//set alarm to go off at wake time
alarms.set(AlarmManager.RTC_WAKEUP, getWakeTime(), pi);
Run Code Online (Sandbox Code Playgroud)
已注册OnStartReceiver类以接收广播,并且在发生警报时将重新启动应用程序。
除非用户从任务管理器中终止应用程序,否则一切都会正常进行。如果应用程序由于被Android OS杀死或者我被System.exit(0)杀死而正常退出;重新启动正常。但是,当它从“任务管理器”中被杀死时,几乎就像警报已被取消一样。
我在Android文档中找不到任何暗示任务管理器将取消警报的内容。关于如何正确设置警报,我做错了吗?
我试过删除标志并仅使用0,但没有任何区别。
谢谢。
退出功能可停止服务,释放唤醒锁,并让Android终止进程
如果您暗示您有一个持续的WakeLock,除非它仅在永久插入的设备上运行,否则您的用户会用鳟鱼打您。
此外,Android可以随时取消该进程。不要误startForeground()以为Android永远不会杀死您的进程。
但是,当它从“任务管理器”中被杀死时,几乎就像警报已被取消一样。
我不知道什么是“任务管理器”,因为Android中没有。如果您是指“设置”中正在运行的应用程序的列表,然后单击“强制停止”,则可以,这会取消所有未解决的警报,并阻止您的应用程序再次运行,直到某些东西手动启动了您的组件之一(例如,用户从启动器启动应用程序) )。
关于如何正确设置警报,我做错了吗?
可能不会。强制停止绝对可以消除警报。
| 归档时间: |
|
| 查看次数: |
4255 次 |
| 最近记录: |