处理Activity中的AsyncTask.doInBackground中的异常?

时间:2013-01-14 06:04:28

标签: android android-asynctask

我跟随guide on Processes and Threads在Android活动中实现AsyncTask,我将在其中执行一些数据库访问。但是,我的代码必须处理doInBackground中的异常。

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

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

2 个答案:

答案 0 :(得分:5)

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

如果是,请存储您遇到的异常,退出doInBackground并在onPostExecute

中显示Toast

如果不是,请将异常信息通过onProgressUpdate传递给publishProgress

尝试弹出Toast中的doInBackground将无效。

答案 1 :(得分: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();
            }
        });
    }

}