我跟随guide on Processes and Threads在Android活动中实现AsyncTask
,我将在其中执行一些数据库访问。但是,我的代码必须处理doInBackground
中的异常。
我目前的想法是提供一个Toast
弹出窗口来通知用户此异常,但现在我担心这个“违反了单线程模型的第二条规则:不要访问来自UI线程外部的Android UI工具包“(根据指南)。
提供Toast弹出窗口会不会错?有没有更好的方法来处理doInBackground
方法中的异常?
答案 0 :(得分:5)
异常会导致您停止doInBackground
处理的内容吗?
如果是,请存储您遇到的异常,退出doInBackground
并在onPostExecute
如果不是,请将异常信息通过onProgressUpdate
传递给publishProgress
。
尝试弹出Toast
中的doInBackground
将无效。
答案 1 :(得分:0)
您可以使用runOnUIThread
从后台主题
@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();
}
});
}
}