什么是java和android中C++Sleep()的最佳替代方案

what is best alternative of C++ Sleep() in java and android?

本文关键字:最佳 方案 C++Sleep java android 什么      更新时间:2023-10-16

我基本上是一名C++开发人员,但最近转到了Android。我的问题是,java中C++(Windows)Sleep()函数的最佳替代方案是什么?我只需要在android(java)中执行程序时有一个简单的延迟,然后在for循环的每次迭代中恢复它。但是当我在java中使用Thread.sleep()时,它会对android系统造成某种挂起,并且无法按预期工作。希望你能理解我的问题和要求。请建议一种更好的方法来获得java中的C++Sleep()功能。

 protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            Paint paint = new Paint();
            paint.setColor(Color.BLACK);
            paint.setStrokeWidth(5);
            paint.setStyle(Paint.Style.STROKE);
            Path path = new Path();
            path.moveTo(myPath[0].x, myPath[0].y);
            for (int i = 1; i < myPath.length; i++) {
                path.lineTo(myPath[i].x, myPath[i].y);               
                canvas.drawPath(path, paint);try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

这是我的代码。我想在延迟1秒后看到每条路径线的绘制,这样我就可以看到该绘制。但它的确切作用是暂停应用程序1秒,然后立即绘制完整的。

你的应用程序挂起是因为你暂停了主线程,而主线程永远不应该暂停。在单独的线程上运行代码,例如:

Thread d = new Thread() {
  @Override
  public void run() { /* code, you can use Thread.sleep() here */ }
};
d.start();

如果您想在应用程序中强制暂停,请使用Thread.sleep()

try {
    Thread.sleep(3000);  // 3 seconds (in milliseconds)
} catch(Exception ex) {       
}

这不应该导致应用程序延迟。。。但是是的,停顿一下
如果我理解得很好,你想要的是唤醒过程的可能性,为此使用Object.wait()

Object myObject = // this can be any object (activity) you have
synchronized (myObject) {
    myObject.wait();
} 

但你需要更多的代码和你想在应用程序中执行的情况,才能给出更准确的答案。。。

java.lang.Thread.sleep(long-millis)方法会导致当前执行的线程睡眠指定的毫秒数,具体取决于系统计时器和调度器的精度和准确性。

  try {
       // thread to sleep for 1000 milliseconds
       Thread.sleep(1000);
       } catch (Exception e) {
       System.out.println(e);
       }

如果您希望某个进程在UI线程外运行,请尝试以下操作。。

        int delay = 500;
        Timer t = new Timer();
        t.schedule(new TimerTask() {
            @Override
            public void run() {
                // your code
            }
        }, delay);

我不了解android,但在任何GUI框架中解决问题的方法基本相同。

您不想让绘制对象花费时间,因为在绘制对象时,您的应用程序将没有响应。此外,GUI框架可能会缓冲绘图调用的结果,因此出现新行的速率可能与进行调用的速率不同。

你想做的是动画你的对象:给你的对象一个状态变量,说明已经画了多少线,然后改变onDraw()方法来画那么多线。然后安排一个计时器事件来改变状态,并定期触发重新绘制。

您还可以使用CountDownTimer并实现自己的暂停类。它是线程安全和安卓专属。