如果通过 2g 网络同时下载,我的 downloadFile AsyncTask 可能需要相当长的时间。我怀疑它被杀死了,但我不确定。
我的问题是:asynctask 的超时时间是多少,当 android 杀死我的任务时会调用什么函数?如果抛出异常,在哪里捕获它?
如果通过 2g 网络同时下载,我的 downloadFile AsyncTask 可能需要相当长的时间。我怀疑它被杀死了,但我不确定。
我的问题是:asynctask 的超时时间是多少,当 android 杀死我的任务时会调用什么函数?如果抛出异常,在哪里捕获它?
Android 不应该扼杀你的任务。AsyncTask 就是这样,异步的,所以 Android 不会为它抛出 ANR。
如果您想在 doInBackground 中测试异常,请将您的代码包装在相关的 try catch 块中,然后在出现异常时抛出或处理异常。
您可以取消 AsyncTask,但您必须在任务中以相关间隔检查isCancelled
标志。
一旦你取消了任务,onPostExecute()
将不会被调用。
当然可以在这里进一步阅读:http: //developer.android.com/reference/android/os/AsyncTask.html
补充:请注意,也许重要的是,Android Ice Cream Sandwich 和 Honeycomb 不再将线程池执行作为默认值,而是使用序列化方法。如果您在 ICS 上发现您的任务似乎永远不会被执行,或者在很长一段时间后执行,您应该执行 usingexecuteOnExecutor()
并将THREAD_POOL_EXECUTOR
参数传递给它。更多信息可在上面的链接中找到。