2010-11-29 1 views
0

필자는 본질적으로 N 밀리 초 동안 '잠자기'하도록 앱의 여러 위치에서 사용할 수있는 도우미 메서드를 작성해야합니다. Handler.postAtTime이이를 수행하는 한 방법 일 수는 있지만, 가능한 경우 코드 스 니펫.Android 2.2 : N 밀리 초 동안 앱을 '잠자기'할 수 있도록 도우미 메서드를 작성할 수 있습니까?

+1

인가 우리 모두가보고 싶지 지칠대로 지친 대화 상자를 표시해야합니다 N 밀리 초 동안 절전 모드로 전환해야하는 응용 프로그램의 주 스레드입니까? 앱을 잠자기로 만드는 것은 무슨 뜻입니까? –

+2

앱을 잠자기 상태로 만들지 말아야합니다. 특히 메인 UI 스레드가 아니라면. 이렇게하면 UI 그리기에 영향을 미치고 앱이 부진해질 수 있습니다. –

+0

나는 Suresh와있다 - 우리는 더 많은 정보를 필요로한다. Y ms에 대한 작업 X 지연은 쉽지만 다른 UI 작업과 백그라운드 프로세스가 정상적으로 계속 될 수 있습니다. 대체로 당신은 N ms마다 무언가를 확인하거나 조사 할 수 있습니다. 우리는 더 많이 알 필요가 있습니다. 아래의 Spencer에게 말했듯이, 안드로이드 UI를 본질적으로 동결시키고 사용자를 자극하고 잠재적으로 FC 경고를 유발할 수 있으므로 manin 스레드를 잠자 게해야합니다. – Eddie

답변

1

이 같은 것을 찾고 계십니까?

try { 
    //Put the thread to sleep for the desired amount of time (milliseconds) 
    Thread.currentThread().sleep(1000); 
} 
catch(InterruptedException ie){ 

} 

이렇게하면 지정한 시간 동안 호출 한 스레드가 잠자기 상태가됩니다.

+2

나는이 방법에 대해 경고 할 것이다. Android 프레임 워크는 언제든지 UI 스레드를 잠그는 것을 강력하게 권장하지 않습니다. 이는 본질적으로 코드가 수행하는 작업입니다. – Eddie

+0

+1 에디. 그렇습니다. 메인 UI 스레드를 sleep()하지 않아야합니다. 이것은 매우 나쁜 습관입니다. –

+0

더하기 측면에서 이것은 작동합니다. 마이너스 쪽에서는 더 나은 방법이있는 것처럼 들리지만 알려주세요. – charlest

5

왜 앱을 잠자기해야하는지 말하지 않았습니다.

당신이 잠시 후 작업을 실행하는 데 필요한 가정 :

Handler h = new Handler(); 
h.postDelayed(new Runnable() { 
    public void run() { 
     // do something here 
    } 
}, 1000); // 1000 ms delay 
+0

이렇게해야하는 이유는 화면에 메시지를 표시하고 60 초 동안 표시 한 다음 다른 메시지를 표시하려고하기 때문입니다. 60 초 동안 완료 할 때까지 기다리는 특정 작업이 없으므로 AsyncTask가 적용되지 않는 것 같습니다. – charlest

+0

asynctask에서 잠을 자나요 (60000)? –

+0

메시지를 게시 할 때마다 새 처리기를 만들지는 말고 원하는 방식입니다. – adamp

2

당신이 스레드를 차단 괜찮다면에 Thread.sleep에 대한 대안은() SystemClock.sleep()이다.

InterruptedException을 무시하므로 처리해야 할 필요가 없으므로 한 줄이면 효과적입니다.

자세한 내용은 http://developer.android.com/reference/android/os/SystemClock.html.

이미 언급 한 바와 같이, 당신이 당신의 응용 프로그램이 응답하지 않을 것 같은 메인 UI 스레드에서이 호출 방지하고 잠재적으로 (기다리거나 강제 종료하시기 바랍니다.)

관련 문제