Android 时点后不触发

Android 时点后不触发,android,timer,handler,Android,Timer,Handler,我正在尝试制作一个每分钟都会改变UI的应用程序,但我一直在努力使用PostTime函数,因为我无法触发它。我用postDelay试过了,效果不错,但postDelay应该能给我更多的精确度 我获取当前时间并设置日历,然后在日期上添加一分钟并调用PostTime,但它不会触发。让我们看看你是否能帮我 private Runnable showMinute = new Runnable() { public void run() { calendar = Calenda

我正在尝试制作一个每分钟都会改变UI的应用程序,但我一直在努力使用PostTime函数,因为我无法触发它。我用postDelay试过了,效果不错,但postDelay应该能给我更多的精确度

我获取当前时间并设置日历,然后在日期上添加一分钟并调用PostTime,但它不会触发。让我们看看你是否能帮我

   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());
    }
  };

您使用的是绝对时间(来自
日历
类)。
handler.posttime
timeformat是自启动以来
ms
的量


您应该使用
SystemClock.uptimeMillis()
进行计算。

我终于解决了这个问题。如果有人有同样的问题,这就是解决办法

 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);
    }
  };

谢谢不知道handler.postAtTime自启动以来使用了ms。但是有没有什么方法可以让我在一个精确的时间触发某个事件(例如12:30)?