[android] Android에서 UI 스레드를 감지하는 방법은 무엇입니까?

Thread.currentThread()애플리케이션에 Android 시스템 UI 스레드가 있는지 감지하는 강력한 방법이 있습니까? 어떤 종류의 동기화가 필요하지 않도록하기 위해
하나의 스레드 ( 예 : ui 스레드) 만 내 상태에 액세스 한다고 주장하는 내 모델 코드에 몇 가지 주장을 넣고 싶습니다 .



답변

UI 스레드의 ID를 확인하는 일반적인 방법은 Looper # getMainLooper를 사용하는 것입니다 .

if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
  // On UI thread.
} else {
  // Not on UI thread.
}

API 레벨 23 이상부터는 메인 루퍼에서 새로운 도우미 메서드 isCurrentThread 를 사용하는 약간 더 읽기 쉬운 접근 방식이 있습니다 .

if (Looper.getMainLooper().isCurrentThread()) {
  // On UI thread.
} else {
  // Not on UI thread.
}


답변

가장 좋은 방법은 다음과 같습니다.

 if (Looper.getMainLooper().equals(Looper.myLooper())) {
     // UI thread
 } else {
     // Non UI thread
 }


답변

API 레벨 23 Looper부터는 멋진 도우미 메서드가 isCurrentThread있습니다. 다음 mainLooper과 같은 방법으로 현재 스레드에 대한 것인지 확인할 수 있습니다.

Looper.getMainLooper().isCurrentThread()

다음과 거의 동일합니다.

Looper.getMainLooper().getThread() == Thread.currentThread()

하지만 좀 더 읽기 쉽고 기억하기 쉬울 수 있습니다.


답변

public boolean onUIThread() {
    return Looper.getMainLooper().isCurrentThread();

}

하지만 API 레벨 23이 필요합니다.


답변

확인 외에 루퍼를 당신이 이제까지 시도하는 경우, 로그 아웃 스레드 ID에 onCreate(), 당신은 찾을 수있는 UI 스레드 (메인 스레드)를 ID가 항상 따라서 1로 동일

if (Thread.currentThread().getId() == 1) {
    // UI thread
}
else {
    // other thread
}


답변

수업에서이 runOnUiThread방법 을 사용할 수 Activity없나요?

http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29


답변