0
doInBackground()는 Looper.loop()이 작동하지 않으면 잘 동작합니다. Looper.Loop() 후에는 인쇄하지 않고 onPostExceute()는 실행하지 않습니다. 방법 1,2,3가 실행될 때까지 기다려야합니다. Looper.prepare()가 사용되지 않으면 method1에서 예외가 발생합니다.Looper.loop() 이후에 onPostExecute()를 실행하지 않습니다.
@Override
protected Void doInBackground(Void... params) {
try {
if (Looper.myLooper() == null)
Looper.prepare();
method1();
method2();
method3();
Looper.loop();
Log.d(TAG,"after loop()");
} else {
method4(); //inside asyn task
}
Log.d(TAG,"doInBackground end");
}catch (Exception e) {
Log.d(TAG,"doInBackground exception "+e);
}
return null;
}
@Override
protected void onPostExecute(Void result) {
try {
Log.d(TAG, "onPostExecute");
//............
}catch (Exception e){
Log.d(TAG,"onPostExecute end");
}
}
@Override
protected void onPreExecute() {
//.....
}
Looper.loop()을 Looper.prepare()와 함께 사용하지 않으면 예외가 발생합니다. Looper.prepare()를 사용하지 않으면 예외가 발생합니다. –
메시지 대기열을 읽을 필요가 없을 때 준비를 사용하지 않음으로써 예외가 발생하는 경우 잘못된 다른 작업을 수행하고 있습니다. UI 스레드에서해야 할 때 AsyncTask에서 Handler를 만드는 것 같습니다. –