program story

안드로이드에서 UI 스레드를 감지하는 방법?

inputbox 2020. 7. 28. 08:30
반응형

안드로이드에서 UI 스레드를 감지하는 방법?


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


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

if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
  // 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그것은 현재의 thread 이러한 방법의 하나입니다 있는지 확인합니다 :

Looper.getMainLooper().isCurrentThread()

실제로 다음과 같습니다.

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

그러나 좀 더 읽기 쉽고 기억하기 쉬울 수 있습니다.


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

}

그러나 API 레벨 23이 필요합니다


looper 확인 외에도 스레드 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

참고 URL : https://stackoverflow.com/questions/2848575/how-to-detect-ui-thread-on-android

반응형