我遵循进程和线程指南,在android活动中实现AsyncTask
,我将在其中执行一些数据库访问。但是,我的代码必须处理doInBackground
中的异常。
我目前的想法是提供一个Toast
弹出通知用户这个异常,但现在我担心这也"违反了单线程模型的第二条规则:不要从UI线程外部访问Android UI工具包"(按照指南)。
我提供Toast弹出框是错的吗?是否有更好的方法来处理doInBackground
方法中的异常?
异常会导致您停止doInBackground
正在处理的内容吗?
如果是,存储您遇到的异常,退出doInBackground
并在onPostExecute
中显示Toast
如果不存在,则通过publishProgress
传递异常信息给onProgressUpdate
。
尝试在doInBackground
中弹出Toast
将不起作用
你可以使用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();
}
});
}
}