首页 > 解决方案 > wait() 不会保存应用程序的进度

问题描述

我的问题是附加“val”的值传递给包含 wait() 调用的方法不会间隔发生。如果有人能真正解决这个问题,我将不胜感激。

我已经尝试过 handler.postDelay(){} 但这似乎也无济于事,如果我要求它等待一秒钟,它将停留五秒钟甚至更少,并附加我的 10 位数字值试图以间隔附加。例如,如果我有“123456”,它应该打印“1”,然后等待 1 秒,打印“2”,依此类推。

public void appendData(val){
logs.append(String.valueOf(val));
//This is what I'm using to start the waiting period
synchronized (this) {
  try {
    this.wait(1000);
  } catch (Exception e) {
    e.printStackTrace();
  }
}
}

我无法弄清楚我所做的任何更改或制作,它总是不会等待,最后会附加整数,或者确切地说,整数会立即出现在我的 UI 上,它不会发生在我想要的间隔上。

标签: javaandroidperformancetime

解决方案


    try {
        System.out.print(1);
        TimeUnit.SECONDS.sleep(1);
        System.out.print(2);
        TimeUnit.SECONDS.sleep(1);
        System.out.print(3);
        TimeUnit.SECONDS.sleep(1);
        System.out.print(4);
        TimeUnit.SECONDS.sleep(1);
        System.out.print(5);
        TimeUnit.SECONDS.sleep(1);
        System.out.println(6);
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        System.err.println(e);
    }

正如评论wait中所说,用于多个线程之间的同步(为此目的,它也是低级的;java.util.concurrent例如,通常您会希望使用 中的高级工具之一)。

与其总是以毫秒为单位指定等待时间,我更喜欢使用TimeUnit枚举以适合等待时间的更人性化的单位来指定它。

为什么我放在Thread.currentThread().interrupt();那里?有关处理InterruptedException可能从睡眠中抛出的正确方法,请阅读此处的“被破坏门铃法”。既有信息又有娱乐性。


推荐阅读