まれに、携帯電話が状態 (「おかしな状態」と呼ばれる) になり、インテント サービスがブロードキャスト レシーバーから 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 やおそらく他のレシーバーでも発生しますが、これら2つは確実に確認されています。
繰り返しますが、これは非常にまれであり、電話が一定期間使用されなかった後に発生するようです。省電力モードに入る可能性があります。
また、アプリケーションのプロセスを終了すると、これが解消されます。