0

我正在编写一个简单的提醒应用程序。所有提醒都存储在数据库中。我有一个查询数据库的服务,并在 AlarmManager 中使用附加和不同的时间戳创建一个pendingIntents。此外,我有一个广播接收器来捕获来自 AlarmManager 的意图。这个广播接收器启动一个带有提醒选项(关闭、贪睡等)的提醒活动。现在这个方案有效,但没有我认为的那么好。如果我在前台有一个提醒活动,那么新的提醒活动会从它开始(当前转到后台)。我不想用新的活动覆盖当前活动,只是通知用户,有一些新的提醒将在当前活动之后显示。

4

1 回答 1

0

正如我所想,我为我的任务找到了一个很好的解决方案:

1)我在 AndroidManifest 中设置了我的提醒活动启动模式是“singleTop”。有关launchMode 的更多信息在这里http://developer.android.com/guide/topics/manifest/activity-element.html简而言之 ,如果我的广播接收器尝试启动已经在前台的活动,它会调用onNewIntent,而不是onCreate。

2)在我的活动中,我必须重写 onNewIntent 方法并将所有传入的意图(来自广播)存储在 ArrayList 中。

3)在完成()之前,我必须从 ArrayList 中删除当前的 Intent,当它的大小变为零时,我实际上已经完成了()活动。

一个重要的补充。在广播接收者意图中必须有 FLAG_ACTIVITY_SINGLE_TOP,如:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);

如果没有它,则不会调用 onNewIntent 的主要活动。如我所见,这是已知问题:http ://code.google.com/p/android/issues/detail?id= 4155 在 Android 1.6 中发现的错误并且仍然存在。所以现在它是功能:)

对不起我的英语,我读起来很容易,但写起来很难:)

于 2013-02-10T14:51:37.510 回答