wait()不会保留应用程序的进度

时间:2019-03-28 21:00:01

标签: java android performance time

我的问题是,将“ 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上,它不会不会像我想的那样定期发生。

1 个答案:

答案 0 :(得分:0)

    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中所述,它是用于多个线程之间的同步(为此也是低级的;通常,您可能希望使用{{1}中的较高级工具之一) })。

我宁愿使用java.util.concurrent枚举以更人性化的单位来指定等待时间,而不是总是以毫秒为单位指定等待时间。

我为什么要把TimeUnit放在这里?有关处理可能从休眠中抛出的Thread.currentThread().interrupt();的正确方法,请阅读有关The Law of the Sabotaged Doorbell here的信息。内容丰富,寓教于乐。