我正在考虑让应用程序尽快崩溃并显示带有错误消息的对话框,但是我不太确定如何在doInBackground里面,因为:
>这个函数不是在UI线程中执行的,所以我不知道我是否可以显示一个对话框.
>我不知道如何访问AsyncTask中的当前活动,所以我无法完成()它.
>我想以某种方式将异常抛出到上层,让一个活动处理它,但这是不可能的,因为doInBackground不会将IOException列为检查的异常.
任何人都有如何正确处理这种情况的建议?
解决方法 您不能在非ui线程中显示对话框.您可以将活动引用传递给异步任务.为了处理这种情况,你可以尝试在doInBackground中捕获异常并重新抛出onPostExecute例如
private class MyAsyncTaskTask extends AsyncTask<...> { private Activity ownerActivity; private Exception exceptionToBeThrown; public MyAsyncTaskTask(Activity activity) { // keep activity reference this.ownerActivity = activity; } protected Long doInBackground(...) { try { ... } catch (Exception e) { // save exception and re-thrown it then. exceptionToBeThrown = e; } } protected voID onPostExecute(...) { // Check if exception exists. if (exceptionToBeThrown != null) { ownerActivity.handleXXX(); throw exceptionToBeThrown; } } }
如果异步任务在Acvitiy类中,那么您可以直接访问它,例如,
public class MyActivity extends Activity { ... AsyncTask<...> task = new AsyncTask<...>() { public voID onPostExecute(...) { // Access activity directly MyActivity.this.xxx() } }}总结
以上是内存溢出为你收集整理的如何在Android中的AsyncTask中优雅地处理异常?全部内容,希望文章能够帮你解决如何在Android中的AsyncTask中优雅地处理异常?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)