我正在开发一个可以在设备启动完成时启动的服务,我正在设置一个首选项文件来存储服务运行状态,以便我可以在需要时在我的广播接收器中检索它:
public class MyServiceBootReceiver extends BroadcastReceiver {
public MyServiceBootReceiver() {super();}
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
if(MyService.isRunning(context)) //static method to get shared preferences value
context.startService(new Intent(context, MyService.class));
}
}
}
现在我对 onReceive() 方法中的“context”参数感到困惑,因为当设备关闭时应用程序及其所有组件将被销毁,哪个上下文在接收器中传递,以及我的应用程序的哪个组件实际上正在接收它?
在调用您的 BroadcastReceiver 之前,Android 将创建您应用程序的应用程序上下文。如果您有自己的类继承 Application 并在其 onCreate 上放置一个 Log,您实际上可以看到这种情况发生。
但是,您在接收器中收到的上下文受到限制:它无法调用
registerReceiver()
或 bindService()
。
有关不同类型上下文的更多信息可以在此处找到。