线程处理程序停止处理方向更改

时间:2011-03-21 20:01:04

标签: android

我的应用程序后台有一个Thread解析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();     
}

1 个答案:

答案 0 :(得分:1)

可能是它在方向更改时再次运行onCreate方法...所以它失去对前一个处理程序的引用...尝试将此..add属性添加到该特定活动中的清单文件android:configChanges =“orientation”..这样它就不会再次在创造了......试一试......