应用程序被杀死时,Android警报已取消

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,但没有任何区别。

谢谢。

Com*_*are 5

退出功能可停止服务,释放唤醒锁,并让Android终止进程

如果您暗示您有一个持续的WakeLock,除非它仅在永久插入的设备上运行,否则您的用户会用鳟鱼打您。

此外,Android可以随时取消该进程。不要误startForeground()以为Android永远不会杀死您的进程。

但是,当它从“任务管理器”中被杀死时,几乎就像警报已被取消一样。

我不知道什么是“任务管理器”,因为Android中没有。如果您是指“设置”中正在运行的应用程序的列表,然后单击“强制停止”,则可以,这会取消所有未解决的警报,并阻止您的应用程序再次运行,直到某些东西手动启动了您的组件之一(例如,用户从启动器启动应用程序) )。

关于如何正确设置警报,我做错了吗?

可能不会。强制停止绝对可以消除警报。