簡體   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