android - Service loses it's intent when it is restarted by system -


i starting service this:

intent intentservice = new intent(getactivity(), acnotificationservice.class); intentservice.putextra("acreservation", reservationactivity.acreservation); getactivity().startservice(intentservice); 

and service class:

/* variables  */  private notificationmanager notificationmanager;  private countdowntimer countdowntimer;  private static int notification_countdown = 0; private static int notification_ranout = 1;  private acreservation acreservation;  /* callbacks  */  @override public void oncreate() {     super.oncreate();      // initialize variables     notificationmanager =             (notificationmanager) getapplicationcontext().getsystemservice(context.notification_service);      // register eventbus     eventbus.getdefault().register(this); }  @override public ibinder onbind(intent intent) {     return null; }  @override public int onstartcommand(intent intent, int flags, int startid) {      // reservation data extras     if (acreservation == null) {         acreservation = (acreservation) intent.getextras().get("acreservation");     }      // start timer     countdowntimer = new countdowntimer(acreservation.getremainingmilliseconds(), 100) {          @override         public void ontick(long millisuntilfinished) {             // update/show notification             notificationmanager.notify(notification_countdown, createreservationactivenotification((int)timeunit.milliseconds.tominutes(millisuntilfinished)));         }          @override         public void onfinish() {             // clear notifications             notificationmanager.cancel(notification_countdown);              // stop service             stopself();         }     }.start();      return super.onstartcommand(intent, flags, startid); }  /* methods  */  public notification createreservationactivenotification(int expinminutes) {     notification.builder notification = new notification.builder(getapplicationcontext());     notification.setcontenttitle("reservation");     notification.setcontenttext("your reservation expires in " + expinminutes + " minutes");     notification.setlargeicon(bitmapfactory.decoderesource(getresources(), r.mipmap.ic_launcher));     notification.setsmallicon(r.drawable.car_icon);     notification.setongoing(true);     notification.setpriority(notification.priority_max);     notification.setonlyalertonce(true);     return notification.build(); }  public void onevent(aceventbusbuttonclick buttonclick) {     if (buttonclick.getbuttonaction() != null) {         if (buttonclick.getbuttonaction().equals(aceventbusbuttonclick.button_cancel_reservation)) {             notificationmanager.cancel(notification_countdown);             countdowntimer.cancel();             stopself();         }     } } 

it's pretty simple. take object out of intent , use calculate milliseconds. start new countdowntimer keeps updating notification.

it works should until service restarted system. loses it's intent data , crashes @ line of code when restarted:

if (acreservation == null) {     acreservation = (acreservation) intent.getextras().get("acreservation"); } 

log says crashes because intent null. calling getextras() on null object when service restarted.

how can fix this?

return start_redeliver_intent onstartcommand() instead of super call returns default value.

http://developer.android.com/reference/android/app/service.html#onstartcommand(android.content.intent, int, int)


Comments

Popular posts from this blog

OpenCV OpenCL: Convert Mat to Bitmap in JNI Layer for Android -

android - org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope -

python - How to remove the Xframe Options header in django? -