我在應用程序的背景中有一個線程解析XML。就像這樣,它通過Handler更新活動視圖中的進度條。這可以正常工作,直到手機改變方向(並且可能在其他破壞性操作期間,例如多任務處理,儘管我沒有經過全面測試)。進行任意數量的旋轉後,進度條會凍結它的位置並且永遠不會前進,即使解析完成並且我的ListView自身更新也很好。線程處理程序停止處理方向更改
下面是相關代碼的簡化版本。我沒有在這裏包括它,但我確實有代碼來確保線程在旋轉之後繼續不受阻礙 - 就像我所說的那樣,解析最終會在相同的時間內完成並更新ListView。這只是進度條處理程序不工作:
private ProgressBar mProgress;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.directory_list);
mProgress = (ProgressBar) findViewById(R.id.progressBar);
mProgress.setMax(entryCount);
startXMLParseThread();
}
private void startXMLParseThread() {
new Thread() {
Handler hUpdateProgressBar = new Handler(){
public void handleMessage(Message msg) {
mProgress.setProgress(entryCount);
}
};
public void run() {
while (parserEvent != XmlPullParser.END_DOCUMENT) {
entryCount++;
hUpdateProgressBar.sendEmptyMessage(0);
parserEvent = parser.next();
}
mHandler.post(new Runnable() {
public void run() {
adapter.getCursor().requery();
}
});
}
}.start();
}
請參閱http://stackoverflow.com/questions/1111980/how-to-handle-screen-orientation-change-when-progress-dialog-and-background-threa和http://stackoverflow.com/questions/3821423/background-task-progress-dialog-orientation-change-is - 任何100個工作 – bigstones 2011-03-21 20:12:25