안드로이드 문서는 말한다 : "각 처리기 인스턴스가 단일 스레드와 연관된 .."안드로이드 핸들러 협회
을 그래서, 나는()에서 onCreate 안에 방법 다음 핸들러를 정의하는 경우 : 다음
myHandler= new Handler();
을 myHandler가 기본 (UI) 스레드와 연결됩니까?
처리기가 작업자 스레드와 "연결된"예제를보고 싶습니다. 네가 가진 것이 있다면, 나는 감사하겠다. 감사합니다. .
안드로이드 문서는 말한다 : "각 처리기 인스턴스가 단일 스레드와 연관된 .."안드로이드 핸들러 협회
을 그래서, 나는()에서 onCreate 안에 방법 다음 핸들러를 정의하는 경우 : 다음
myHandler= new Handler();
을 myHandler가 기본 (UI) 스레드와 연결됩니까?
처리기가 작업자 스레드와 "연결된"예제를보고 싶습니다. 네가 가진 것이 있다면, 나는 감사하겠다. 감사합니다. .
여기에는 두 가지 질문이 있습니다.
첫 번째 답변은 "예"입니다. 해당 코드 줄이 onCreate에 있으면 myHandler가 UI 스레드와 연결됩니다.
처리기는 모든 스레드와 연결할 수 없습니다. 루퍼와 관련이 있어야합니다. Looper 설명서 맨 첫 단락에 예제가 나와 있습니다.
이 사실은 다음과 같습니다. Handler의 기본 생성자를 사용하는 경우 Handler 개체는 현재 스레드와 연결됩니다.
그러나 Handler 클래스에는 다른 여러 생성자가 있음을 알 수 있습니다. Looper 인수를 Handler 생성자에 제공하면 처리기가 Looper와 연결된 스레드와 연결됩니다. (루퍼가 생성 된 쓰레드를 감지하고 유지합니다.)
스레드의 run() 메소드에서 루퍼를 인스턴스화하여 루퍼로 스레드를 생성 할 수 있습니다. HandlerThread 클래스에서 HandlerThread 클래스는 Thread의 하위 클래스이며 Looper를가집니다. 아마도 HandlerThread의 더 좋은 이름은 LooperThread 였을 것입니다. 어쨌든 HandlerThread 클래스에는 getLooper()라는 메서드가 있습니다. 그래서, 먼저 HandlerThread의 인스턴스를 만든 다음 처리기 생성자에 인수로 자사의 getLooper()를 사용 : 위의 조각이 당신의 UI 스레드에서 실행할 수 있습니다
HandlerThread myLooperThread=new HandlerThread("LooperThread");
myLooperThread.start();
Handler myLooperHandler=new Handler (myLooperThread.getLooper(),
new MyLooperHandlerCallback());
myLooperHandler.sendEmptyMessage(50);
하지만, 윌 여전히 동료 myLooperHandler HandlerThread의 스레드입니다. 당신은 같이 로깅 스레드 ID로,이를 확인할 수 있습니다 : 그것은 그들이 활동의 경계를 넘어 액세스 할 수 있도록 유지 작업자 조각에 스레드를 인스턴스화하는 것이 가장 좋습니다
//runs in HandlerThread's thread
public class MyHandlerCallback implements Callback {
@Override
public boolean handleMessage(Message msg) {
Log.i("CALLBACK", "Thread ID:"+android.os.Process.myTid());
Log.i("CALLBACK", "msg.what:"+msg.what);
return true;
}
}
하는 것으로.