Android 动态和静态 BroadcastReceivers
Android dynamic and static BroadcastReceivers
我要在我的应用程序中插入一些提醒。他们每个人都会有不同的时间。阅读有关 BroadcastReceiver 的文章,即使应用程序不是 运行,静态版本也会运行。仅当应用程序处于活动状态时才为动态版本,在 onPause 时被销毁并在 onResume 时重新创建。
因为我要插入提醒,我是否需要为我的每个提醒创建静态接收器?不同时间提醒的处理方式正确吗?
虽然我们定义了动态广播接收器,但提醒只会在应用程序对用户处于活动状态时触发,否则广播接收器将不会被调用,用户也无法收到通知提醒。为此,必须将广播接收器声明为静态,以便即使应用程序关闭也会触发提醒。请记住警报的工作原理:)
静态还是动态? 我们可以假设提醒可能会设置更长的时间段,之后将被触发。因此,在您的情况下使用静态广播接收器更安全。
在您的清单文件中:
<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>
我要在我的应用程序中插入一些提醒。他们每个人都会有不同的时间。阅读有关 BroadcastReceiver 的文章,即使应用程序不是 运行,静态版本也会运行。仅当应用程序处于活动状态时才为动态版本,在 onPause 时被销毁并在 onResume 时重新创建。 因为我要插入提醒,我是否需要为我的每个提醒创建静态接收器?不同时间提醒的处理方式正确吗?
虽然我们定义了动态广播接收器,但提醒只会在应用程序对用户处于活动状态时触发,否则广播接收器将不会被调用,用户也无法收到通知提醒。为此,必须将广播接收器声明为静态,以便即使应用程序关闭也会触发提醒。请记住警报的工作原理:)
静态还是动态? 我们可以假设提醒可能会设置更长的时间段,之后将被触发。因此,在您的情况下使用静态广播接收器更安全。
在您的清单文件中:
<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>