간단 측면에서 :왜 배경 스레드 산란 것 자체 백그라운드 스레드가 자신의 핸들러 & 루퍼 그냥 알고 .I UI의 구성 요소를 수정하는 산란 할 이유 처리기 및 루퍼
루퍼 : 루프 및 실행 메시지 큐에서 작업
처리기 : 나는이 글에서했다이 조각을 살펴 큐
에 작업이있으세요 게시 인터넷에
public class MyActivityV2 extends Activity {
private Handler mUiHandler = new Handler();
private MyWorkerThread mWorkerThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWorkerThread = new MyWorkerThread("myWorkerThread");
Runnable task = new Runnable() {
@Override
public void run() {
for (int i = 0; i < 4; i++) {
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (i == 2) {
mUiHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MyActivityV2.this,
"I am at the middle of background task",
Toast.LENGTH_LONG)
.show();
}
});
}
}
mUiHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MyActivityV2.this,
"Background task is completed",
Toast.LENGTH_LONG)
.show();
}
});
}
};
// MyWorkerThread == HandlerThread
mWorkerThread.start();
mWorkerThread.prepareHandler();
// 2 starting of thread
mWorkerThread.postTask(task);
mWorkerThread.postTask(task);
}
@Override
protected void onDestroy() {
mWorkerThread.quit();
super.onDestroy();
}
}
//MyWorkerThread.java
class MyWorkerThread extends HandlerThread {
private Handler mWorkerHandler;
public MyWorkerThread(String name) {
super(name);
}
public void postTask(Runnable task){
mWorkerHandler.post(task);
}
public void prepareHandler(){
mWorkerHandler = new Handler(getLooper());
}
}
안드로이드에서 코드 또는 스레드 기초가 부족하다는 점을 완전히 오해하고 있습니다. 미안해.
배경 스레드는 기본적으로 반복됩니다 (두 번). 주요 아이디어는 배경 스레드를 통한 조작 UI 구성 요소입니다.
이 봐 유무 : 조작 UI의 구성 요소의 문제, 왜 그냥 UI 스레드 핸들러의 참조를하지 않을 경우mWorkerHandler
왜 배경 스레드가 자체 처리기를 만들 것입니다 및 핸들러를 통해 실행 파일을 게시합니다.
및 백그라운드 스레드가 자신의 Message Queue를 만드는 것을 나타냅니다 자신의 루퍼 (백그라운드 스레드의 루퍼)를 만드는
mWorkerHandler = new Handler(getLooper());
. 주 스레드의 메시지 큐가 아닌 백그라운드 스레드 만 가지고 놀면 안됩니까?
미리 감사드립니다.
실제로 달성하고자하는 것은 무엇입니까? – pskink
내 말은, 왜 코드가 UI의 쓰레드 핸들러에 대한 참조를 가지고 있지 않는가? 그래서 루퍼와도 마찬가지다. 배경 쓰레드는 UI 쓰레드의 메시지 큐를 변경하기 위해 왜 자신의 루퍼를 만들까요? –
ok, UI가 아닌 스레드에서 UI를 업데이트 하시겠습니까? – pskink