2013-02-28 5 views
1

안녕하세요, 모두 이러한 코드로 인해 처리 지연이 발생할 수 있습니까?자바 코드 속도 향상

while(true) 
if(!connected) break; 

우리는 항상 상태를 확인합니다. 각 반복마다 작은 수면을 설정하면 더 빠를 것입니다.

코드는 에서 실행됩니다. Android GingerBread.

편집 :

완료 될 때까지 다른 스레드 false로 연결 설정 변수를 기다립니다

. 가변 변수는 잠금과 같이 사용됩니다. thread는 대개 true를 찾고 false가 될 때까지 대기합니다. true로 설정하고 끝에 만 변경합니다.

+1

당신에 대한 연결 확인 무엇입니까? 안드로이드에서 많은 연결이 그들과 관련된 방송을 가지고있어서, 그러한 루프가 전혀 필요하지 않습니다. –

+9

연결되어 있지 않으면 휴대 전화를 휴대용 히터로 변환하는 좋은 방법입니다. –

+1

@AlexanderPogrebnyak 당신이 틀렸다고 생각합니다. 당신의 코멘트를 설명해 주시겠습니까? 'connected'가'false' 인 경우 그는'while' 루프에서 즉시 벗어납니다. – jlordo

답변

1

내가 특히 하나의 코어 프로세서에, 다른 프로세스에 대한 무료 프로세서 리소스에, 루프 작은 수면을 추가하는 더 나은 것 같아요. 이 같은

+0

Android에서이 작업을 수행하지 마십시오. 앱의 사용자 환경을 파괴 할뿐만 아니라 앱이 실행 중일 경우 전반적인 OS 성능이 저하 될 수 있습니다. 바른 길을 찾거나 올바른 길을 찾으십시오. –

1

나는 그것이 이렇게 될 수 보라 :

while(connected) { 
// do stuff... 
+1

코드가 처음 호출 될 때 connected가 false 인 경우에는 실행되지 않습니다. 나는 OP가 그것을 원한다는 것을 매우 의심한다. –

+0

@RaghavSood에 의해 게시 된 코드는'connected'가'false'이면 처음으로 실행되지 않을 것이다. – jlordo

+0

@RaghavSood 당신은 OPs'if '조건에서 부정을 보았습니까? 'connected'가'false' 인 경우,'if' 조건은'true'이고 루프에서 빠져 나옵니다. – jlordo

1

시도 뭔가 :

private Integer connected; 
private ConnectedListener connectedListener; 

public interface ConnectedListener { 
    public void onDisconnected(); 
} 

private void startThreads() { 
    for (int i = 0; i < 10; i++) { 
     new Thread(new Runnable() { 

      @Override 
      public void run() { 
       synchronized (connected) { 
        connected++; 
       } 

       // do some random long work 

       synchronized (connected) { 
        connected--; 
        if (connected == 0 && connectedListener != null) { 
         //let the listener know that we are completely disconnected 
         connectedListener.onDisconnected(); 
        } 
       } 
      } 
     }).start(); 
    } 
} 
+0

이 방법은 일부 응용 프로그램에서 유용 할 수 있지만 더 복잡합니다. – Balvonas