2011-12-25 3 views
0
)

안드로이드 프로젝트에서 문제가 발생했습니다.안드로이드에서 블로킹을 방지하는 방법 (

나는 1 초마다 뭔가하고 싶다. 그러나 문제는 그 1 초 사이에 뭔가 다른 것이 있다는 것이다.

루프를 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 자세한 내용을 적어주세요 수, 나는 내 코드의 일부이다 여기 :-) 안드로이드 핵 물질의 beginer에 오전, 귀하의 답변 주셔서 감사합니다 nom = "CameraPhoto"; \t \t double x; \t \t 카메라 = Camera.open(); \t \t capteurBdd = new CapteursBDD (null); \t \t while (true) { \t \t camera.takePicture (null, null, null); \t \t x = 10; \t \t ValeursCapteur capteur = 새로운 ValeursCapteur (nom, x, 0, 0); \t \t capteurBdd.insertValeursCapteur (capteur); \t \t Log.i (null, "GPS ="+ x); \t \t { \t \t 대기 (3000); \t \t} \t \t 캐치 (예외 : InterruptedException의 예) { \t \t} \t \t}}' –

+0

내 편집을 참조하십시오. 'findViewById'의 경우 어떤 컨트롤이나 레이아웃을 사용할 수 있습니다. –

+0

Tomislave, 정말 고마워요.하지만이 줄에는 문제가 있습니다 :'findViewById (R.id.mainView) .postDelayed (predrePhotoRunnable, 1000);' mainView 란 무엇입니까? 이 도와 주셔서 너무 감사 –

0

android에서 async tasks을 사용할 수 있습니다.

+0

감사합니다. 그림자에 대해 살펴 보겠습니다. '공공 무효 PrendrePhoto() { \t \t 문자열 : –

관련 문제