我从doInBackground
的{{1}}方法中抛出错误。可能吗?我怎样才能使Asynctask
答案 0 :(得分:9)
您不能跨线程抛出异常。
但是,您可以在doInBackground()
中捕获异常,将其存储在asynctask中的成员变量中,然后在onPostExecute()
中处理它。
答案 1 :(得分:1)
不,你不能在后台线程中抛出异常。
更好的方法是将后台线程返回的结果(,如果它的异常消息然后让它为)传递给onPostExecute()
方法,然后根据方法处理结果需要。
答案 2 :(得分:1)
您可以通过以下三种方法之一来完成此操作:
将异常存储为AsyncTask
子类的局部变量,并按照laalto和Peter Pei Guo的建议,在onPostExecute()
方法中检查它。您可以查询它的类类型,并根据异常类型执行不同的任务。 AsyncTask
保证这样做是线程安全的。
将通用结果类型更改为Object
并从doInBackground()
方法返回异常或结果,然后在{{1}中检查结果对象的类类型方法,并在适当时强制转换和处理它。这主要是onPostExecute()
(FutureTask
在内部使用)实现它的AsyncTask
方法的方式,尽管它将它的状态存储在局部变量中,因为它可以&# 39; t依赖于结果类型。
为结果创建一个holder类,可以构造为包含结果或某些特定的异常,定义它的get方法返回结果类型(如果可用)并抛出异常,然后设置您的get()
子类对该类的通用结果类型,并在从持有者处获得结果时捕获AsyncTask
方法中的异常。