2011-02-02 2 views
1

코드에 백그라운드 스레드의 일부로 for 루프가 있습니다. 루프 내에서 코드의 실행을 통해 부분적으로 기다리고 싶습니다. 그래서 thread.sleep을 호출합니다. 대기 시간 동안 전화 디스플레이가 닫히면 대기 시간이 엉망이된다는 것을 발견했습니다. 문서에 따르면 수면은 시간적으로 신뢰할만한 것이 아닙니다. 그래서 대체해야 할 부분이 궁금합니다. 늘어나는만큼 내가 게시물을 지연 스레드를 만들면 나는 볼 수있는 루프 내에서 연속성을 풀 것입니다. 나는 틀렸다고 희망하고 기계공을 제대로 이해하지 못했다. Ronthread.sleep을 대체 할 대상

답변

0

처리기를 사용하고 postDelayed으로 전화 할 수 있습니까? 나는 솔직히 그것이 얼마나 신뢰할 수 있을지 또는 귀하의 문제에 부합 하는지를 주장 할 수는 없지만 작은 정기적 인 업데이트를 위해 그것을 사용합니다.

Partial Wake Locks을 보면 더 안정적인 성능을 제공하는지 확인할 수 있습니다. 수면의 신뢰성 (처리하는

(...) 
Message msg = new Message(); 
try { 
    myHandler.sendMessageDelayed(msg,1000); 

      } catch (Exception e) { 
       Log.d(TAG,"Hum?",e); 
      } 
     } 
    } 


    private Handler myHandler= new Handler() { 
     /* 
     * (non-Javadoc) 
     * 
     * @see android.os.Handler#handleMessage(android.os.Message) 
     */ 
     @Override 
     public void handleMessage(Message msg) { 
      //DO WHAT YOU WANT.. 
     } 
    }; 
+0

postDelayed를 호출하면 어떻게 설명 할 수있는 for 루프 코드로 돌아갈 수 있습니까? 나는 PartialWakeLocks를 찾았고 큰 경고 전력이 다시 소비된다. 할 수 있으면 특히 전력 사용량을 낮게 유지하고 싶지만이 수면 상황은 여러 번 발생할 수 있습니다. – ron

+0

postDelayed를 사용하는 아이디어는 루프의 내용을 처리기가 호출하는 단일 작업 단위로 만들고 다시 실행되도록 다시 게시하는 것입니다 (현재 수면 대신). 웨이크 잠금 장치에서 네가 조심해야하고 당신이 성취하고자하는 것을 알지 못한다면 나는 어느 쪽이든 논쟁하지 않을 것이지만, 나는 당신에게 생각할 것을주고 싶다. –

+0

업데이트 : 나는 다시 생각하고 매우 신뢰할 수있는 반복 알람을 사용합니다. 이것은 for 루프를 필요로하지 않으므로 필요할 때 경보를 취소 할 수 있습니다. – ron

0

당신이 뭔가를해야합니다. 이것은 애니메이션에서 종종 이루어지며, 예를 들어 실시간으로 따라 잡기 위해 몇 개의 프레임을 건너 뛰기로 결정할 수 있습니다.

1

한 가지 방법) 당신이 잠을 실제 시간을 측정하는 코드를 추가하는 것입니다

+0

나는 근본적인 것을 놓치고 있어야합니다. 나는 마지막 날에 이것에 대해 생각해 보았고이 코드를 사용하여 어지럽 혔다. 아무리 for 루프가 있고 그 안에 sendMessageDelayed가 있으면 루프가 메시지를 보내지 만 루프의 다음 반복으로 바로 진행됩니다. 이것은 내가 기대하는 것과 실제로 일어나는 것입니다. 나는이 필요를 채우려 고 의도 된 수면을 생각하지만, 나는 그것에 의존하지 않습니다. 나는 스레드와 핸들러의 개념에서 뭔가를 놓치고 있어야한다. – ron

+0

누군가가 나를 도와 줄 수있는 뭔가를 가르쳐주기를 바랍니다. 나는 Rito Meier의 책을 가지고 있지만 그게 도움이되지 않는 것 같습니다. – ron

관련 문제