我有一项启动服务的活动。该服务(Service-A)向广播接收器注册intentfilter“ACTION_SCREEN_ON”。当这个广播接收器运行时,它会启动另一个服务(Service-B),它会定期更新我的小部件,直到屏幕关闭。
这是我注册我的广播接收器&我如何实现我的boradcast接收器
//Service that register my boradcastreceiver
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
IntentFilter filterScreen = new IntentFilter(Intent.ACTION_SCREEN_ON);
filterScreen.addAction(Intent.ACTION_SCREEN_OFF);
filterScreen.addAction(Intent.ACTION_TIMEZONE_CHANGED);
filterScreen.addAction(Intent.ACTION_TIME_CHANGED);
mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, filterScreen);
return START_STICKY;
}
//My broadcastreceiver
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF))
{
}
else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON))
{
Intent service = new Intent(context, MinuteUpdateService.class);
context.startService(service);
}
else if (intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED))
{
Intent service = new Intent(context, MinuteUpdateService.class);
service.putExtra("oneTimeRun", true);
context.startService(service);
}
else if (intent.getAction().equals(Intent.ACTION_TIME_CHANGED))
{
Intent service = new Intent(context, MinuteUpdateService.class);
service.putExtra("oneTimeRun", true);
context.startService(service);
}
}
这种流程通常很有效。但有时我的boradcastreceiver没有按预期运行。它不接收ACTION_SCREEN_ON广播。通常这是在长时间睡眠后发生的。
我认为Service-A被系统杀死/停止,我的广播未注册。
是否有任何方法可以使此服务/广播持久化?还是有另一种方式更适合我的意图?