0

once a timer start it couldn't be stop for 3 hours.if I click on backpress timer stoped.I am not sure how to pause and resume the timer as the textview.Please check my code.

TextView timer;

SharedPreferences mpref;

SharedPreferences.Editor ed;
String output;
MyCount counter;
long seconds;

long millisFinished;

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_start__test2);
    mpref=getSharedPreferences("com.example.bright", Context.MODE_PRIVATE);

      timer = (TextView) findViewById(R.id.timer);



    //startService(new Intent(this, MyService.class));
    counter = new MyCount(10800000, 1000);

    counter.start();


}

countDownTimer method

   public class MyCount extends CountDownTimer {
    Context mContext;


   public MyCount(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
        Log.e("timeeeee", millisInFuture + "");
    }


    public void onTick(long millisUntilFinished) {
        Log.e("time",millisUntilFinished+"");

        millisFinished = millisUntilFinished;
        timer.setText(formatTime(millisUntilFinished));
    /*    String timer_str = timer.getText().toString();
        //SharedPreferences sp=

        ed = mpref.edit();
        ed.putString("time", timer_str);
        ed.commit();*/

        if (seconds == 0) {

        }
    }



    public void onFinish() {
        Toast.makeText(getApplicationContext(), "Time Up", Toast.LENGTH_LONG).show();
    }


}

@Override
protected void onResume() {
    super.onResume();
  /*//  Log.e("valueeeee",millisFinished+"");
   // new MyCount(millisFinished,1000);
   // Log.e("value",millisFinished+"");*/
  //counter

}

@Override
public void onDestroy() {
    super.onDestroy();
    // counter.cancel();
}

//================================================================================Time format

public String formatTime(long millis) {
    output = "";
    seconds = millis / 1000;
    long minutes = seconds / 60;
    long hours = minutes / 60;

    seconds = seconds % 60;
    minutes = minutes % 60;
    hours = hours % 60;

    String secondsD = String.valueOf(seconds);
    String minutesD = String.valueOf(minutes);
    String hoursD = String.valueOf(hours);

    if (seconds < 10)
        secondsD = "0" + seconds;
    if (minutes < 10)
        minutesD = "0" + minutes;

    if (hours < 10)
        hoursD = "0" + hours;

    output = hoursD + " : " + minutesD + " : " + secondsD;

    return output;
}

Please check my code

2 Answers2

2

U need to use a service so that the timer runs even if the app is closed/destroyed. Try as below

    public class TimerService extends Service {
        private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        private Context mContext;

        public IBinder onBind(Intent intent) 
        {
            return null;
        }

        public void onCreate() 
        {
            super.onCreate();
            mContext = this; 
            startService();
        }

        private void startService()
        {           
            scheduler.scheduleAtFixedRate(runner, 0, 3, TimeUnit.HOURS);
        }

        final Runnable runner = new Runnable() {
            public void run() 
            {
                mHandler.sendEmptyMessage(0);
            }
        }    

        public void onDestroy() 
        {
            super.onDestroy();
            Toast.makeText(this, "Service Stopped ...", Toast.LENGTH_SHORT).show();
        }

        private final Handler mHandler = new Handler()
        {
            @Override
            public void handleMessage(Message msg)
            {
                //do what ever you want as 3hrs is completed
            }
        };    
    }
Logic
  • 2,230
  • 2
  • 24
  • 41
0

If you create objects in your activities scope they will be disposed once the activity is gone because of the activity lifecycle. The solution for running long background tasks is us inn services by IntentService. You can read more about it here :

https://developer.android.com/training/run-background-service/create-service.html

Good luck!