繁体   English   中英

java和android中C++ Sleep()的最佳选择是什么?

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

我基本上是一名 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.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();
} 

但是需要更多的代码以及您希望在应用程序中执行此操作的情况以提供更准确的答案...

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

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

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 并实现您自己的暂停类。 它是线程安全的并且是安卓独有的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM