Android의 runOnUiThread 대 Looper.getMainLooper (). post
Android의 UI 스레드에서 작업을 실행하기 위해 runOnUiThread ()와 Looper.getMainLooper (). post ()를 사용하는 것 사이에 차이점이 있는지 누구든지 말할 수 있습니까 ??
내가 결정할 수있는 유일한 것은 runOnUiThread가 비 정적 활동 메서드이기 때문에 Looper.getMainLooper (). post ()는 활동을 볼 수없는 클래스에서 무언가를 코딩해야 할 때 더 편리하다는 것입니다 (예 : 인터페이스).
나는 UI 스레드에서 무언가를 실행해야하는 것에 대한 논의를 찾고 있지 않습니다. 어떤 것은 할 수없고 많은 것은해서는 안되는 것이지만, 어떤 것 (AsyncTask 시작과 같은)은 반드시 실행되어야합니다. UI 스레드.
고마워,
R.
다음은 백그라운드 스레드에서 호출 될 때 동일하게 작동합니다.
사용
Looper.getMainLooper()
Runnable task = getTask(); new Handler(Looper.getMainLooper()).post(task);
사용
Activity#runOnUiThread()
Runnable task = getTask(); runOnUiThread(task);
유일한 차이점은 UI 스레드에서 수행 할 때입니다.
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}
현재 스레드가 이미 UI 스레드인지 확인한 다음 직접 실행합니다. 메시지로 게시하면 현재 UI 스레드 메서드에서 돌아올 때까지 실행이 지연됩니다.
Runnable
UI 스레드에서 를 실행하는 세 번째 방법도 있습니다.이 방법 은 UI 스레드 View#post(Runnable)
에서 호출 된 경우에도 항상 메시지를 게시합니다. 이는 View
코드가 실행되기 전에이 제대로 구성되고 레이아웃 이 있는지 확인하기 때문에 유용합니다 .
참고 URL : https://stackoverflow.com/questions/13974661/runonuithread-vs-looper-getmainlooper-post-in-android
'programing' 카테고리의 다른 글
C ++에서 함수 이름에 별칭을 어떻게 할당합니까? (0) | 2020.09.03 |
---|---|
Java의 null 반환 메서드를 Scala의 Option으로 래핑합니까? (0) | 2020.09.03 |
문자열에서 영숫자가 아닌 문자를 제거하고 공백을 유지하려면 어떻게합니까? (0) | 2020.09.03 |
더 이상 사용되지 않음 : mysql_connect () (0) | 2020.09.03 |
허가없이 디렉토리로 cd (0) | 2020.09.02 |