2011-12-25 120 views
0

我的Android項目中有一個小問題。如何在Android中阻止(true)阻止

我想每1秒做一次,但問題是我在這些1秒之間還有別的事要做。

我試圖做一個while (true)循環與wait(1000)裏面,但問題是,此循環阻止所有其他指令。

這將是一個解決方法/解決方案是什麼?

回答

2

我會考慮一個線程場景。如果您正在使用UI更新,則可以使用postDelayed,這樣您就可以使用Runable更新UI。您也可以從Runable中調用Runable。

View.postDelayed(new Runnable() { 
      public void run() { 
       // do work 
      } 
     }, 1000); 

編輯:根據您的評論,這是如何實現重複回調你的功能。

public void PrendrePhoto() { 
     String nom = "CameraPhoto"; 
     double x; 
     camera = Camera.open(); 
     capteurBdd = new CapteursBDD(null); 
     while (true) { 
      camera.takePicture(null, null, null); 
      x = 10; 
      ValeursCapteur capteur = new ValeursCapteur(nom, x, 0, 0); 
      capteurBdd.insertValeursCapteur(capteur); 
      Log.i(null, "GPS = " + x); 
      try { 
       findViewById(R.id.mainView).postDelayed(predrePhotoRunnable, 1000); 
      } catch (InterruptedException ex) { 
      } 
     } 
    } 

    private Runnable predrePhotoRunnable = new Runnable() { 
     public void run() { 
      PrendrePhoto(); 
     } 
    }; 
+0

謝謝您的回答,您可以請給我abaut更多細節,我在android系統的深化發展一個beginer :-) 這裏是我的代碼的一部分: '公共無效PrendrePhoto(){ \t \t字符串nom =「CameraPhoto」; \t \t double x; \t \t camera = Camera.open(); \t \t capteurBdd = new CapteursBDD(null); \t \t while(true){ \t \t camera.takePicture(null,null,null); \t \t x = 10; ValeursCapteur capteur = new ValeursCapteur(nom,x,0,0); \t \t capteurBdd.insertValeursCapteur(capteur); \t \t Log.i(null,「GPS =」+ x); (3000); \t \t嘗試{ \t \t等待(3000); \t \t} \t \t趕上(InterruptedException的前){ \t \t} \t \t}}' – 2011-12-25 14:05:20

+0

見我的編輯。對於'findViewById',你可以使用任何控件或佈局。 – 2011-12-25 14:12:16

+0

非常感謝Tomislave,但是我對這行有一個問題:'findViewById(R.id.mainView).postDelayed(predrePhotoRunnable,1000);' 什麼是mainView? 非常感謝你的幫助 – 2011-12-25 14:16:09

0

您可以在android中使用async tasks

+0

謝謝Shadow,我會看看這個。 – 2011-12-25 14:05:53