RD如果我可能会建议一个相当扭曲的方法来处理后台线程中的错误。考虑将调用包装在后台线程的try catch中并返回一个有状态的对象。所以如果你想要后台线程返回一个字符串,创建一个BoolString类。
//a utility class to signal success or failure, return an error message, and return a useful String value
//see Try Out in C#
public final class BoolString {
public final boolean success;
public final String err;
public final String value;
public BoolString(boolean success, String err, String value){
this.success= success;
this.err= err;
this.value= value;
}
}
用法:
public BoolString tryEncrypt(String inString, String password) {
try {
String value= encrypt(inString, password);
return new BoolString(true,"",value);
}
catch (GeneralSecurityException e){
return new BoolString(false,e.getMessage(),"");
}
}
protected void onPostExecute(BoolString result){
progress.dismiss();
if (result.success){
result.value;
}
else {
result.err;
}
}
来源
2011-04-09 04:58:58
JAL
谢谢取消方法关闭对话框,我不能让onCancelled()永远执行,但! – CQM 2011-04-09 22:16:52
在调用我的后台线程的活动中,我有一个_initTask.cancel(true),用于在活动停止时停止后台线程。然后在我的doInBackground()方法中,在尝试返回之前检查this.isCancelled()。当doInBackground()检测到isCancelled()时,它会自动执行onCancelled()方法,而不是onPostExecuteMethod()。 – 2011-04-10 23:14:31