Android 개발 의 하위 스 레 드 UI 를 조작 하 는 몇 가지 방법
방법 을 보기 전에 안 드 로 이 드 의 메시지 메커니즘 을 알 아야 한다.
방법 1 Activity.runOnUiThread
방법 은 다음 과 같다.
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText("Hello");
}
});
이 방법 은 간단 하고 사용 하기 쉬 우 며,현재 스 레 드 가 UI 스 레 드 라면 즉시 실행 합 니 다.현재 스 레 드 가 UI 스 레 드 가 아니라면 이벤트 대기 열의 UI 스 레 드 에 발 표 됩 니 다.사실 Handler 와 차이 가 많 지 않 습 니 다.UI 업데이트 요청 메 시 지 를 이벤트 대기 열 에 추가 하고 메 인 프로그램 이 비어 있 을 때 실 행 됩 니 다.방법 2 Handler
메 인 스 레 드 에서 Handler 를 다음 과 같이 정의 합 니 다.
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
String data = (String)msg.obj;
textView.setText(data);
break;
default:
break;
}
}
};
하위 스 레 드 에서 메 시 지 를 보 내 고 Handler 에 게 UI 업 데 이 트 를 완료 하 라 고 알 립 니 다.코드 는 다음 과 같 습 니 다.
new Thread(new Runnable(){
@Override
public void run() {
//
mHandler.sendEmptyMessage(0);
Message msg =new Message();
msg.obj = " ";// , , List、map
mHandler.sendMessage(msg);
}
}).start();
방법 3 View.post
final Button btn =(Button)findViewById(R.id.btn);
btn.post(new Runnable(){
@Override
publicvoid run() {
btn.setText("Hello");
}
});
위의 코드 는 btn 의 내용 을 업데이트 하 는 것 이 고 아래 코드 도 이런 효 과 를 얻 을 수 있 습 니 다.
Handler handler = new Handler();
final Button btn = (Button)findViewById(R.id.btn);
handler.post(new Runnable(){
@Override
public void run() {
btn.setText("Hello");
}
});
이것 은 handler.post 방법 을 사용 하 는 것 입 니 다.하 나 는 View.post 방법 을 사용 하 는 것 입 니 다.handler.post 방법 은 이미 안 드 로 이 드 메시지 체제 에서 소개 되 었 습 니 다.사실은 최종 적 으로 방법 2 중의 send 방법 을 호출 했 습 니 다.이제 View.post 방법의 소스 코드 를 살 펴 보 겠 습 니 다.
public boolean post(Runnable action) {
Handler handler;
AttachInfo attachInfo = mAttachInfo;
if (attachInfo != null) {
handler = attachInfo.mHandler;
} else {
// Assume that post will succeed later
ViewRootImpl.getRunQueue().post(action);
return true;
}
return handler.post(action);
}
방법 에서 주요 기능 코드 는 attachInfo.mHandler 입 니 다.현재 스 레 드(즉 UI 스 레 드)의 Hanlder 를 가 져 온 다음 action 대상 post 를 Handler 에 가 져 옵 니 다.Handler 의 처리 과정 에서 링크 문 은 전 달 된 action 대상 을 Message(Message 의 callback 을 action)로 포장 한 다음 UI 스 레 드 의 메시지 순환 에 투입 합 니 다.Handler 의 dispatchMessage 방법 에서 첫 번 째 말 은 runnable 의 run 방법 을 직접 호출 하 는 것 입 니 다.이 때 는 UI 스 레 드 로 연결 되 어 있 기 때문에 걱정 없 이 UI 를 업데이트 할 수 있 습 니 다.방법 4 방송
서브 스 레 드 에서 방송 을 보 내 고 메 인 스 레 드 에서 방송 을 받 으 며 UI 를 업데이트 합 니 다.
방법 5 AsyncTask 사용
하위 스 레 드 에서 UI 에 접근 하 는 것 을 간소화 하기 위해 시스템 은 AsyncTask 를 제공 합 니 다.
AsyncTask 는 경량급 비동기 작업 클래스 로 온라인 스 레 드 에서 배경 작업 을 수행 한 다음 에 실행 진도 와 결 과 를 메 인 스 레 드 에 전달 하고 UI 를 업데이트 할 수 있 습 니 다.본질 적 으로 AsyncTask 는 Thread 와 Handler 를 봉 인 했 지만 AsyncTask 는 특별히 시간 이 걸 리 는 배경 작업 에 적합 하지 않 습 니 다.특별히 시간 이 걸 리 는 작업 이 필요 하 다 면 스 레 드 탱크 를 사용 하 는 것 을 권장 합 니 다.
서로 다른 API 버 전의 AsyncTask 는 서로 다른 표현 을 가지 고 있 기 때문에 주의해 야 한다.편폭 을 통제 하기 위해 구체 적 인 AsyncTask 의 사용 방법 과 작업 원 리 를 뒤에 단독으로 소개 할 계획 입 니 다.
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 안 드 로 이 드 개발 의 하위 스 레 드 조작 UI 의 몇 가지 방법 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.