我在猜測taskLiteApplication.setData();在UI線程中運行,而不是在後臺線程中運行,或者在後臺線程中運行,並且因爲取消了UI線程中的取消操作而被調用。
基本線索,以解決您的問題:
private ProgressDialog dialog; // Keep this global
private Handler mHandler;
void doStuff() {
dialog = ProgressDialog.show(TabLayoutActivity.this, "", "Loading. Please wait...", true);
mHandler = new Handler()
{
@Override public void handleMessage(Message msg) {
if (msg.obj != null) {
dialog.dismiss();
//change view
Intent myIntent = new Intent(TabLayoutActivity.this, TabLayoutActivity.class);
TabLayoutActivity.this.startActivity(myIntent);
}
}
};
//refresh the view
Thread t = new Thread(new Runnable() {
@Override public void run() {
// Assuming setData does NOT run on it's own background thread
taskLiteApplication.setData();
Message message = Message.obtain();
message.obj = "DONERAEREAR";
mHandler.sendMessage(message);
}
})};
t.start();
}
編輯增加了一個處理程序,由Wizetux指出需要在對話框中的UI線程被取消
這樣做的好處是你可以發送處理程序錯誤消息,警告消息,成功消息並進行相應處理。
E.G.
message.obj = "ERROR";
mHandler.sendMessage(message);
在處理
然後
if ((String)msg.obj.equals("ERROR")) { /* Handle Error */ }
是的,它可能是我在想,啓動對話框之前,將被罰款,但肯定的, – 2012-03-06 21:29:09
我會盡力做到這一點在隨後的AsyncTask我會讓你更新謝謝你的回答 – 2012-03-06 21:29:40
工作中,你只是錯過了doInBackground函數的返回值,謝謝! – 2012-03-06 22:55:12