引导完成的广播接收器上下文参数
Boot completed broadcast receiver context parameter
我正在开发一项可以在设备启动完成时启动的服务,我正在设置一个首选项文件来存储服务 运行 状态,这样我就可以在需要时在我的广播接收器中检索它:
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 将创建您的应用程序的应用程序上下文。如果您有自己的 class 继承应用程序并在其 onCreate 上放置一个日志,您实际上可以看到这种情况。
但是,您在接收器中接收到的上下文是受限的:它不能调用 registerReceiver()
或 bindService()
。
可以找到有关不同类型上下文的更多信息here。
我正在开发一项可以在设备启动完成时启动的服务,我正在设置一个首选项文件来存储服务 运行 状态,这样我就可以在需要时在我的广播接收器中检索它:
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 将创建您的应用程序的应用程序上下文。如果您有自己的 class 继承应用程序并在其 onCreate 上放置一个日志,您实际上可以看到这种情况。
但是,您在接收器中接收到的上下文是受限的:它不能调用 registerReceiver()
或 bindService()
。
可以找到有关不同类型上下文的更多信息here。