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