PostAtTime not starting

I am trying to make an application that changes the user interface every minute, but I struggle with the postAtTime function a lot because I cannot get it to run. I tried it with postDelay and it works, but postAtTime should give me more precession.

I get the current time and set the calendar, then add a minute to the date and call postAtTime, but it does not start. See if you can help me.

private Runnable showMinute = new Runnable() { public void run() { calendar = Calendar.getInstance(); minute = calendar.get(Calendar.MINUTE); minute = minute % 10; switch (minute){ case 0: numero.setImageResource(R.drawable.b0); break; case 1: numero.setImageResource(R.drawable.b1); break; case 2: numero.setImageResource(R.drawable.b2); break; case 3: numero.setImageResource(R.drawable.b3); break; case 4: numero.setImageResource(R.drawable.b4); break; case 5: numero.setImageResource(R.drawable.b5); break; case 6: numero.setImageResource(R.drawable.b6); break; case 7: numero.setImageResource(R.drawable.b7); break; case 8: numero.setImageResource(R.drawable.b8); break; case 9: numero.setImageResource(R.drawable.b9); break; default: break; } handler.removeCallbacks(mostrarHora); calendar.add(Calendar.MINUTE, 1); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); handler.postAtTime(showMinute, calendar.getTimeInMillis()); } }; 
+4
source share
2 answers

You are using absolute time (from the Calendar class). handler.postAtTime timeformat is the number of ms since launch.

For calculation you should use SystemClock.uptimeMillis() .

+8
source

Well, finally, I solved it. If someone has the same problem, this is the solution.

  private Runnable mostrarHora = new Runnable() { public void run() { int segundo; long start, diferencia; calendar = Calendar.getInstance(); diferencia = calendar.getTimeInMillis()-SystemClock.uptimeMillis(); segundo = calendar.get(Calendar.MINUTE); segundo = segundo % 10; switch (segundo){ case 0: numero.setImageResource(R.drawable.b0); break; case 1: numero.setImageResource(R.drawable.b1); break; case 2: numero.setImageResource(R.drawable.b2); break; case 3: numero.setImageResource(R.drawable.b3); break; case 4: numero.setImageResource(R.drawable.b4); break; case 5: numero.setImageResource(R.drawable.b5); break; case 6: numero.setImageResource(R.drawable.b6); break; case 7: numero.setImageResource(R.drawable.b7); break; case 8: numero.setImageResource(R.drawable.b8); break; case 9: numero.setImageResource(R.drawable.b9); break; default: break; } handler.removeCallbacks(mostrarHora); calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE)+1); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); start = calendar.getTimeInMillis()-diferencia; handler.postAtTime(mostrarHora, start); } }; 
+4
source

All Articles