为什么对话框显示即使它是从非Ui线程调用?

时间:2015-07-06 12:12:39

标签: android

我在使用处理程序从主线程调用对话框时没有保存其统计信息的活动有问题。此代码崩溃了应用程序,因为活动未保存其统计信息错误:java.lang.IllegalStateException:不能在onSaveInstanceState之后执行此操作:

public class CheckIfGameEndsTask implements Runnable
    {

        private boolean CheckIfGameEnds() // calls AsyncTask
        {
            // some code here to check if game ends, returns false if it didn't ...

            Handler mainHandler = new Handler(mContext.getMainLooper());
            Runnable r = new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    Dialog_GameEnded dialog = new Dialog_GameEnded(); 
                    dialog.show(mContext.getFragmentManager().beginTransaction(), Dialog_GameEnded.DIALOG_TAG); 
                }
            };
            mainHandler.post(r);
            return true;
        }

        @Override
        public void run() {
            // TODO Auto-generated method stub
            CheckIfGameEnds();
        }

    }

上面的代码正如我所说的那样,我的应用程序因我提到的错误而崩溃,但这不是:

public class CheckIfGameEndsTask implements Runnable
    {

        private boolean CheckIfGameEnds() // calls AsyncTask
        {
            // some code here to check if game ends, returns false if it didn't ...

            Dialog_GameEnded dialog = new Dialog_GameEnded(); 
            dialog.show(mContext.getFragmentManager().beginTransaction(), Dialog_GameEnded.DIALOG_TAG);

            return true;
        }

        @Override
        public void run() {
            // TODO Auto-generated method stub
            CheckIfGameEnds();
        }

    }

这是否意味着我的线程不起作用,我一直在主线程中工作?因为当我搜索时我读过你不应该调用任何与替换视图相关的内容:ex:显示对话框,替换片段..等等,在UI线程旁边的一个线程中,否则我将有例外或代码不会跑。我不想发布我的应用程序,如果它会导致这样的问题。

修改

每当某个事件发生时,我就会调用该线程:

new Thread(mThreadTask).start();

其中“mThreadTask”是上述类的对象。

0 个答案:

没有答案