android – BroadcastReceivers在收听BOOT_COMPLETED时会收到哪些上下文?

当手机断电时,
Android中的AlarmManagers会丢失所有已注册的闹钟.

我在android启动时使用以下广播接收器来触发:

public class AlarmBootReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
            Cursor alarmCursor = MainActivity.dbHelper.loadAlarms();
            // Iterate through every stored alarm and set those alarms.
            // ....
            alarmCursor.close();
        }
    }
}

>当在系统启动时触发广播接收器的onReceive时,该方法会给出什么上下文参数?我必须知道上下文,因为我需要上下文来取消在该上下文中设置的警报.
>我假设调用MainActivity.dbHelper.loadAlarms()不安全,因为MainActivity未在系统启动时初始化.或者它是否安全,因为dbhelper和loadAlarms()都被初始化并声明为静态?

最佳答案

When the broadcast receiver’s onReceive is triggered at system bootup, what context parameter is given to the method? I have to know
the context, because I need the context to cancel alarms set in that
context.

在这种情况下,您将在onReceive()中获取全局应用程序Context.但是,这是无关紧要的.你不需要知道.

要在以后取消警报,您将创建一个PendingIntent,您可以使用您想要执行此操作的任何上下文.警报未链接到特定上下文,它们仅链接到特定应用程序.

I am assuming the call to MainActivity.dbHelper.loadAlarms() is not
safe because MainActivity is not initialized in system bootup. Or is
it safe because dbhelper and loadAlarms() are all initialized and
declared static?

如果dbHelper确实是静态的并且在创建实例时初始化(而不是在onCreate()中),则此调用很好.通常,在活动上调用静态方法是不受欢迎的,因为假设已正确设置Activity,很容易做一些愚蠢的事情.最好将这些静态方法移动到一般的实用程序类,它不是一个Activity,只包含静态方法.这看起来不那么可疑了.

点赞