多线程和对话显示/解除在Android中提供例外

时间:2012-05-17 20:33:02

标签: java android multithreading exception dialog

我有Android应用程序,可以创建多个线程。有些线程使用线程安全的HttpClient来连续从服务器获取数据。

示例1:线程1 - >从服务器获取数据,现在我必须显示Dialog通知用户。 例2:线程2 - > (在UI线程上)show modal PendingDialog - >开始线程2 - >在服务器上发布数据并检查响应(不在UI线程上) - > runOnUiThread(){dismissPendingDialog()...}

基本上我用以下方法创建线程:

classRunnableInstance = new MyRunnable(...);
classThreadInstance = new Thread(classRunnableInstance);
classThreadInstance.start();

“获取”线程的基本结构是:

public void run() {
    try {
        while(shouldRun) {
            SomeResultObj result = MyHttpClient.invokeSomeMethod();
            if(checkIfIMustInformUser(result)) {
                inform();
            }
            sleep();
        }
    }
    catch(IOException e) {
        activityGivenInConstructor.showFetchingDataError(e); //show on UI-thread
    }
}

protected void inform(final SomeResultObj result) {
    activityGivenInConstructor.runOnUiThread(new Runnable() {
        public void run() {
            Dialog dialog = MyDialogUtils.create(context, messageId);
            ...
            dialog.show();
            //or pendingDialog.dismiss();
        }
    });
    shouldRun = false;
    return;
}

protected void sleep() {
    try {
        Thread.sleep(AppConstants.SLEEP_DELAY);
    }
    catch(InterruptedException e) {
        shouldRun = false;
    }
}

我也分别在onPause()onResume()停止并启动线程。

我正在处理“一次显示一个对话框”并取得成功。但是当用户执行某些操作时会出现问题 - 例如:

  • 退出申请
  • 转到新活动
  • 回家等

当我显示对话框时(注意:在UI线程上),有时会出现WindowManager$BadTokenExceptionIllegalStateExceptionMyActivity has leaked window等异常。

我可以在dialog.show()之前检查:

if(!Thread.interrupted() && shouldRun && !activityGivenInConstructor.isFinishing())

但这只能退出应用程序问题。在其他情况下会出现一些例外情况。

我该如何实现?那不会有例外吗? 这是检查/ if(!Thread.interrupted()...我可以做些什么来防止异常上升?

1 个答案:

答案 0 :(得分:0)

我不是andriod开发人员,但我做了一些UI编码。从您发布的内容来判断,如果用户当前所在的屏幕不需要显示模式对话框,那么不应该以编程方式处理吗?更具体地说checkIfIMustInformUser(result)方法调用?