异步任务中的Android WebView getHitTestResult()崩溃了应用程序

时间:2014-05-29 07:19:02

标签: android android-asynctask android-webview

我已在WebView上实现了上下文菜单,其中保存图像作为选项。当用户点击该选项时,图像将以 asynctask DownloadImage()下载 在DownloadImage asynctask的 doInBackground 里面我有这样的代码:
HitTestResult result = webview.getHitTestResult(); if (result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE) { // code to download and save the image }
这在4.4以上的所有Android版本上运行良好。现在我将 targetSdkversion 从17更改为19,当点击保存图像选项时,我的应用程序开始在android 4.4上崩溃。检查崩溃日志我在行HitTestResult result = webview.getHitTestResult();上获得运行时异常。但是如果我再次将targetSdkVersion设置为17,它仍然可以继续在Android 4.4上正常运行。
我认为它与某种基于Chromium的新Android 4.4(API级别19)有关。更具体地说与此相关:
http://developer.android.com/guide/webapps/migrating.html#Threads
现在我想知道我应该将targetSdkversion设置为17并释放构建或执行其他解决方法来解决此问题吗? 对此最好的解决方案是什么?

1 个答案:

答案 0 :(得分:1)

就像文档说的那样:解决方法是只在UI线程上调用WebView方法。例外是有意的 - 新应用程序不应该从后台线程调用WebView方法。首选解决方案是将targetSdk设置为19并更新代码。

在你的情况下,看起来你可以从'保存图像'菜单选项处理程序(在UI线程上运行,右边?)获取webview.getHitTestResult()。getType()的值,并将其保存为AsyncTask上的字段。