android - Countdown timers in the background updating the ui -


i have countdown timer counts down current time set user. although, want have ability access other apps or go home screen of device while having countdown timer run , continue update textview timer left in countdown. there way this? tried implementing service below don't know if right way accomplish task, did receive error.

        @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_count_down);    //        if (savedinstancestate != null){ // //        }          titletextview = (textview)findviewbyid(r.id.titletextview);         timetextview = (textview)findviewbyid(r.id.timetextview);           bundle getalarminfo = getintent().getextras();         titleofalarm = getalarminfo.getstring("title");         totaltime = getalarminfo.getstring("totaltime");           number = new bigdecimal(totaltime).tobiginteger();           actualtimefiniliazedinmilliseconds = number.intvalue();         titletextview.settext(titleofalarm);  //        countdown = new countdowntimer(actualtimefiniliazedinmilliseconds, timeinterval);  //        new updatecountdowntime().execute();           countdown = new countdowntime(actualtimefiniliazedinmilliseconds, timeinterval);         countdown.start(); //        startservice(new intent(getapplicationcontext(), countdown.class));      }      @override     public boolean oncreateoptionsmenu(menu menu) {         // inflate menu; adds items action bar if present.         getmenuinflater().inflate(r.menu.menu_count_down, menu);         return true;     }      @override     public boolean onoptionsitemselected(menuitem item) {         // handle action bar item clicks here. action bar         // automatically handle clicks on home/up button, long         // specify parent activity in androidmanifest.xml.         int id = item.getitemid();          //noinspection simplifiableifstatement         if (id == r.id.action_settings) {             return true;         }          return super.onoptionsitemselected(item);     }       public class countdowntime extends countdowntimer {           /**          * @param millisinfuture    number of millis in future call          *                          {@link #start()} until countdown done , {@link #onfinish()}          *                          called.          * @param countdowninterval interval along way receive          *                          {@link #ontick(long)} callbacks.          */         public countdowntime(long millisinfuture, long countdowninterval) {             super(millisinfuture, countdowninterval);         }          @override         public void ontick(long millisuntilfinished) {                long millis = millisuntilfinished;             hms = string.format("%02d:%02d:%02d", timeunit.milliseconds.tohours(millis),                     timeunit.milliseconds.tominutes(millis) - timeunit.hours.tominutes(timeunit.milliseconds.tohours(millis)),                     timeunit.milliseconds.toseconds(millis) - timeunit.minutes.toseconds(timeunit.milliseconds.tominutes(millis)));               timetextview.settext(hms);         }          @override         public void onfinish() {             intent goback = new intent(countdownact.this, listofalarms.class);         startactivity(goback);             finish();         }         }      @override     protected void onpause() {         super.onpause();         timetextview.settext(hms);          }    //    public class countdown extends service{ // //        public  countdown () { // //        } // //        @override //        public ibinder onbind(intent intent) { //            return null; //        } // //        @override //        public void oncreate() { //            super.oncreate(); // //            countdown = new countdowntime(actualtimefiniliazedinmilliseconds, timeinterval); //            countdown.start(); //        } //    } 

you need use service , broadcast receiver . have created example broadcast receiver .

check , let me know if have issues.

create service :timerservice.java

 @override     public int onstartcommand(intent intent, int flags, int startid) {         //initialize , start counter         countdown = new hokusfocuscountdowntimer(timedifference, 1000);              countdown.start();          return super.onstartcommand(intent, flags, startid);     } 

in mainactivity.java

/*     * used receive updated time broadcast receiver     * */     private final broadcastreceiver timebroadcaster = new broadcastreceiver() {         @override         public void onreceive(context context, intent intent) {             //method used update gui fields             updategui(intent);         }     };      /**      * update iu changing timer of focus hour      *      * @param intent focus hour timer value      */     private void updategui(intent intent) {          applog.showlog("update ui", "timer stopped");          if (intent.getextras() != null) {              string focushms = intent.getstringextra(constants.hocus_focus_timer);             focusmillisecond = intent.getlongextra(constants.hocus_focus_timer_milli_second, 0);             txtfocushourtimer.settext("" + focushms);         }     }       @override     public void onresume() {         super.onresume();         registerreceiver(timebroadcaster, new intentfilter(                 hokusfocuscountdowntimer.countdown_broadcast_receiver));       }      @override     public void onpause() {         super.onpause();         try {             unregisterreceiver(timebroadcaster);         } catch (exception e) {             e.printstacktrace();         }      } 

hope answer helpful you


Comments