Android에서 처리기를 설명하는 사이트 (스레딩 항목)에서이 스 니펫을 가져 왔습니다. 두 번째로 출력 작업에서 판단일련 번호로 처리기의 내용을 처리합니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Thread myThread = new Thread(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(MyActivity.this, "I am at the middle of background task",
Toast.LENGTH_LONG)
.show();
}
});
}
}//ends for()
// THE SECOND HANDLER, RIGHT HERE!
mUiHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MyActivity.this,
"Background task is completed",
Toast.LENGTH_LONG)
.show();
}
});
} //ends run()
});
myThread.start();
기사의 작가가 거의 확실 번째 Handler
가 마지막으로 실행된다는 것입니다 같은
Toast.makeText(MyActivity.this,
"Background task is completed",
Toast.LENGTH_LONG)
.show();
이 보인다 인 Handler
을 실행.
내 질문은 두 번째 Handler
이 첫 번째 작업이 끝난 직후에 실행될 것이라는 사실이 맞는지 여부입니다. 하지만, 여러 번 실행했을 때, 예, 마지막으로 실행됩니다. 내 생각에 Handler
은 백그라운드에서 수행됩니다. Thread
그러면 Handler
이 먼저 실행될 두 가지 작업을 알지 못합니다. 설명이 필요합니다, 미리 감사드립니다.
그래서 "처리기 실행 순서"가 아닌 "작업 실행 순서"가 될 가능성이 더 큽니까? –
처리기를 스레드 간 통신 방법으로 생각하십시오. 토스트는 "메인"또는 "UI"스레드에서만 표시 할 수 있습니다. 메인 쓰레드가 코드를 실행하도록 요청하는 방법은 핸들러를 통해 이루어진다. 그래서 코드는 토스트가 "완료되었습니다"라고 묻기 전에 "중간에"토스트하도록 메인 스레드에 요청합니다. 기술적으로, 메인 쓰레드가 차단되면, 요청이 실행될 때까지 기다릴 수도 있지만, 어떤 경우에는 요청 된 순서대로 처리하게됩니다. – orip
알았어. 기본적으로 작업은 같은 스레드에서 시작하므로 시퀀스가 여전히 중요합니다. –