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
없나요?