안드로이드 면접(7): 비동기 메시지 메커니즘의HandlerThread 면접에서 당신이 알아야 할 모든 것
1.HandlerThread는 무엇입니까?
HandlerThread는 본질적으로 하나의 라인 클래스로 Thread를 계승한다.HandlerThread는 자신의 내부 Looper 대상이 있어 looper 순환을 할 수 있다.HandlerThread의 looper 대상을Handler 대상에게 전달함으로써handleMessage 방법에서 비동기 작업을 수행할 수 있습니다.
2. HandlerThread 생성 배경:
면접관이handler가 서브라인에서 어떻게 메시지를 보내는지 물어보면 누군가가 메인 라인의 Looper를 받거나 수동으로 Looper를 호출할 수 있다고 말한다.prepare 및 Looper.loop, 이건 분명히 할 수 있어. 이때 면접관이 한마디 했을 거야. 다른 방법이 있나?순간 멍, 있나 없나!!(Handler Thread와 접촉한 적이 없다면) 사실 이런 하위 라인에서 메시지를 보내는 상황은 구글 엔지니어가 일찌감치 우리에게 제공했다. 이것이 바로 Handler Thread의 발생 배경이다. Google은 우리가 메인 라인의 Looper를 가져올 필요도 없고 수동으로 Looper를 호출할 필요도 없다.prepare 및 Looper.loop, Looper를 봉인하고 이 두 가지 방법을 수동으로 호출했습니다.
3. HandlerThread의 특징:
4
4
4
4
4
4.HandlerThread의 메커니즘 원리:
HandlerThread는 Thread 클래스를 계승하는 것으로 본질적으로 하나의 루틴 클래스이고 코드는 비교적 간단하며 주로 두 가지 방법인run()과 getLooper()를 본다.
public void run() {
mTid = Process.myTid();
Looper.prepare();
synchronized (this) {
mLooper = Looper.myLooper();
notifyAll();
}
Process.setThreadPriority(mPriority);
onLooperPrepared();
Looper.loop();
mTid = -1;
}
run 메서드에서 Looper가 호출되었습니다.prepare, Looper 대상을 만들고 Looper 대상을 현재 라인에 연결하면 동기화 메커니즘이 Looper 대상을 가져옵니다.
public Looper getLooper() {
if (!isAlive()) {
return null;
}
// If the thread has been started, wait until the looper has been created.
synchronized (this) {
while (isAlive() && mLooper == null) {
try {
wait();
} catch (InterruptedException e) {
}
}
}
return mLooper;
}
이 블로그를 좋아하는 제인 여러분, 좋아요를 한 번 눌러주세요. 당신의 매번의 관심은 저의 전진의 동력이 될 것입니다. 감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.