Android动态和静态BroadcastReceivers

时间:2016-11-01 04:09:06

标签: android broadcastreceiver

我即将在我的应用上插入一些提醒。他们每个人都会有不同的时间。阅读BroadcastReceiver,静态版本即使在应用程序未运行时也会运行。动态版本仅在应用程序处于活动状态时,在onPause上被破坏并在onResume上重新创建。 因为我要插入提醒,我是否需要为每个提醒创建静态接收器?是在不同时间处理提醒的正确方法吗?

2 个答案:

答案 0 :(得分:0)

虽然我们定义了一个动态广播接收器,但只有在应用程序对用户有效时才会触发提醒,如果不是广播接收者不会被呼叫且用户无法获得通知通过提醒。为此,必须将广播接收器声明为静态,以便即使应用程序关闭也会触发提醒。请记住警报的工作原理:)

答案 1 :(得分:0)

静态还是动态?我们可能会认为提醒可能会被设置一段较长的时间,之后会被触发。因此,在您的情况下使用静态广播接收器更安全。

在您的清单文件中:

<receiver android:name=".YourBroadcastReceiver"/>

为每个提醒分开接收器?实际上,没有。您可以将所有提醒指向一个静态接收器,它将处理所有这些提醒而没有任何问题。如果要分离需要执行不同操作的提醒类型,可以将一些stringExtra添加到您的意图中,并在广播接收器的if-else语句中提取该意图。这是单向的。

如果将来的提醒设置为相当长的日期:您可能知道使用alarmManager设置提醒。但是,如果重新启动系统,则会删除所有警报。因此,您可以考虑在提醒中添加某种内容。只要您可以轻松地从中读取和写入数据,就可以在SharedPreferences / SQLite数据库或您喜欢的任何其他方法中存储有关提醒的信息。然后,您需要在系统重启后重置警报。为此,您需要再添加一个broadcastReceiver来监听正在完成的系统重启动作,并在收到它时运行。然后在那里重新创建警报或运行单独的intentService,以重新创建警报。

在您的清单文件中:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<receiver android:name=".BootCompletedReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>