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