나는 하나의 스레드에 대해 이야기하고있다. 온 클릭() 핸들러 (물론, 우리가 가진 클릭 된 버튼)의 실행에 의해코드 실행이 메인 이벤트 루프에 의해 중단 될 수 있습니까?
/* TOP LEVEL OF EXECUTION LOOPER NOW WORKING */
class MyActivity extends Activity {
void onCreate(Bundle instance) {
super.onCreate(instance);
setContentView(R.layout.activity_main);
doComplicatedStuff();
}
void doComplicatedStuff() {
// Doing stuf
}
void onClick() {
// Process event
}
void anyOtherMethod() {
/* NOT TOP LEVEL OF EXEUCTION, LOOPER NOW CAN'T WORK */
}
}
/* TOP LEVEL OF EXECUTION, LOOPER NOW WORKING */
그래서 제 질문은, doComplicatedStuff() 중단 될 수 있습니다 예를 들어 나는 그것의 활동 UI와 다음과 같은 방법이 있습니까?
이제는 doClick() 처리기가 doComplicatedStuff()가 작업을 끝낼 때까지 doComplicatedStuff()를 중단시킬 수 없다고 생각합니다. 최상위 레벨의 코드 실행에는 Looper가 있기 때문에 다음 메시지 이벤트를 받아 처리기 (처리기를 호출 한 다음 onClick() 메서드 호출)에 전달합니다. 즉, 루퍼는이 스레드에 실행 방법이없는 경우에만 작업을 수행합니다.
대단히 감사합니다! 어제 나는 질문을했습니다. 이 질문은 runOnUiThread에 관한 것이므로 질문에 대한 답변 (http://stackoverflow.com/questions/17489551/multiple-asynctasks-onpostexecute-order)이 올바르지 않다고 생각하십니까? –
그의 대답은 정확하고 내 것도 그렇습니다. 이 두 가지 문제는 별도의 문제를 해결합니다. Mine은 하나의 스레드 만 실행 중이라고 가정합니다. 그는 그렇게하지 않으므로 비동기로 작업을 실행할 수 있습니다. 그러나 한 번에 하나의 작업 만 GUI를 업데이트합니다. GUI에서 하나의 항목이 작동 중일 때이 항목이 원하는 경우 다른 비동기 작업을 방해 할 수 있습니다. 그러나 다른 작업은 어느 상태 에나있을 수 있습니다. 이미 완료되었을 수도 있습니다. 나는이 접근법을 제안하지 않을 것이다. –