很少有手机会进入我的 Intent 服务无法从广播接收器获得 startService 命令的状态(称为“有趣状态”)的问题。(是的,清单定义了接收器和服务)。
在此示例中,我正在侦听推送通知,然后调用 CheckinService。接收者:
public class PushReceiver extends BroadcastReceiver {
private static final String LOG_TAG = "push_receiver";
@Override
public void onReceive(Context context, Intent intent) {
logger.putExtra("debug", "Received Push");
Intent serviceIntent = new Intent(context, CheckinService.class);
context.startService(serviceIntent);
logger.putExtra("debug", "Sent to Service");
}
服务:
public class CheckinService extends IntentService {
private static final String LOG_TAG = "checkin_service";
public static final int SERVICE_ID = 3;
public CheckinService() {
super(LOG_TAG);
Log.i(LOG_TAG, "Service says: Checkin service started no constructor");
}
public CheckinService(String name) {
super(LOG_TAG);
Log.i(LOG_TAG, "Service says: Checkin service started with constructor");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.i(LOG_TAG, "Auto Checkin started");
.....tons of genius logic.....
}
}
因此,当手机进入有趣状态时,“收到推送”会被记录,“发送到服务”会被记录,但服务的构造函数和 onHandleIntent 方法永远不会被调用。
我不仅在推送上发生这种情况,而且在 inexactRepeatingAlarm 和其他可能的接收器上也发生了这种情况,但这两个已经得到确认。
同样,这种情况非常非常罕见,并且似乎在手机闲置一段时间后发生;并且可能进入省电模式。
此外,终止应用程序的进程可以清除这一点。