0
doInBackground()工作正常.. Looper.loop()後的代碼將不起作用。在Looper.Loop()之後不執行打印並且不執行onPostExceute()。我需要等到方法1,2,3執行。如果不使用Looper.prepare(),則會在方法1中發生異常。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(),我會得到異常。 –
如果您在不需要讀取消息隊列時未通過使用prepare來獲得異常,那麼您正在做其他事情。當你應該在UI線程上創建一個Handler時,可能會在AsyncTask上創建一個Handler。 –