2015-07-01 73 views
-2

我基本上是一個C++開發人員,但最近已經轉移到Android。 我的問題是Java中C++(Windows)Sleep()函數的最佳選擇是什麼?我只需要簡單地延遲執行android(java)中的程序,然後爲for循環的每次迭代恢復它。但是,當我在java中使用Thread.sleep()時,它會導致某種類型的android系統掛起並且不能按預期工作。 希望你能理解我的問題和要求。請提出一個更好的方法來獲得Java中的C++ Sleep()功能。在java和android中,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秒,然後立即繪製完成。

+0

Possibel重複http://stackoverflow.com/questions/8369718/sleep-function-in-android-program – Peopleware

+2

研究'android.os。Handler'類 – pskink

+0

對於這種特殊情況(您編輯的問題中的'onDraw'方法),您應該閱讀關於'ValueAnimator' /'ObjectAnimator' – pskink

回答

3

如果要強制暫停在你的應用程序中使用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(); 
} 

但將需要更多的代碼,你想在你的應用程序來執行這個給了更確切的答案的情況......

1

如果你想一些進程來運行關閉UI線程試試這個..

 int delay = 500; 
     Timer t = new Timer(); 
     t.schedule(new TimerTask() { 

      @Override 
      public void run() { 
       // your code 
      } 
     }, delay); 
2

的java.lang.Thread.sleep(單位爲毫秒長)方法使得當前執行的線程休眠爲指定的毫秒數,受到的精度和系統計時器和調度程序的準確性。

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

你的應用掛起,因爲你暫停主線程,它永遠不應該被暫停。在一個單獨的線程運行 你的代碼,例如:

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

你也可以使用一個CountDownTimer和實現自己的暫停類。它是線程安全的和android專用的。

1

我不知道android,但解決你的問題的方法任何的GUI框架都差不多。

您不希望繪製對象花費時間,因爲繪圖發生時,您的應用程序將無響應。此外,GUI框架可能會緩衝繪圖調用的結果,因此新行出現的速率可能與您撥打電話的速率不同。

你想要做什麼是動畫你的目標:給你的對象狀態變量,說有多少行已經制定,並改變你的onDraw()方法來繪製多行。然後計劃一個計時器事件,使其處於顛簸狀態,並定期觸發重新繪製。

相關問題