我目前使用扩展AsyncTask
的类将一些数据发布到php webservice。
现在我需要进行同步调用,因为我想显示一旦发送数据后我的应用程序崩溃的默认异常弹出窗口(previousHandler.uncaughtException(t, e)
)。
我可以暂时禁用AsyncTask
上的异步功能,还是有其他建议
这是我目前的代码,提前谢谢:
public void uncaughtException(Thread t, Throwable e) {
final Writer result = new StringWriter();
final PrintWriter printWriter = new PrintWriter(result);
e.printStackTrace(printWriter);
String stacktrace = result.toString();
printWriter.close();
String deviceUuid = Utilities.DeviceUuid(ctx, cr);
String bluetoothName = Utilities.LocalBluetoothName();
AsyncTasks.ErrorLogTask logTask = new AsyncTasks.ErrorLogTask(e, bluetoothName, deviceUuid, stacktrace);
logTask.execute();
//task wont be complete before this code below runs since its async.
previousHandler.uncaughtException(t, e);
}
答案 0 :(得分:0)
我认为你仍然需要抓住异常。我会在你的AsyncTask中保持调用,但是捕获异常。使用标志作为doInBackground
的返回值,或者创建AsyncTask的本地变量以用作标志,并在onPostExecute
检查标志并在必要时显示对话框。
通常,您不希望在主UI线程上进行服务器调用,因为存在ANR的风险。看到这篇文章: http://developer.android.com/guide/practices/responsiveness.html
答案 1 :(得分:0)
将默认异常弹出窗口放入onPostExecute()
的{{1}}方法中。任务完成后,该块在主线程中执行。