1

我正在按照关于进程和线程的指南来实现AsyncTask一个 android 活动,我将在其中执行一些数据库访问。但是,我的代码必须处理doInBackground.

我目前的想法是提供一个Toast弹出窗口来通知用户这个异常,但现在我担心这也“违反了单线程模型的第二条规则:不要从 UI 线程外部访问 Android UI 工具包”(如根据指南)。

提供 Toast 弹出窗口我会错吗?有没有更好的方法来处理doInBackground方法中的异常?

4

2 回答 2

5

异常会导致您停止doInBackground正在处理的内容吗?

如果是,请存储您遇到doInBackground的异常,退出并显示 Toast inonPostExecute

如果不是,则将异常信息传递给onProgressUpdatewith publishProgress

试图弹出Toastin 是doInBackground行不通的。

于 2013-01-14T06:09:19.780 回答
0

您可以使用runOnUIThread从后台线程更新 UI

  @Override
  protected void doInBackground(Void... params) {
   try{
        // do some stuff
    }catch(Exception ex){
    ex.printStackTrace();
    final String message = ex.getMessage();
        yourActivity.runOnUiThread(new Runnable() {
            public void run() {
               // show toast
                Toast.makeText(getApplicationContext, message, Toast.LENGTH_SHORT).show();
            }
        });
    }

}

于 2013-01-14T06:14:30.060 回答