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

异步任务中的Android WebView getHitTestResult()使应用程序崩溃,android,android-asynctask,android-webview,Android,Android Asynctask,Android Webview,我在WebView上实现了上下文菜单,并将保存图像作为一个选项。当用户单击该选项时,图像将在异步任务中下载DownloadImage() 在DownloadImage asynctask的doInBackground中,我有如下代码: HitTestResult=webview.getHitTestResult(); if(result.getType()==HitTestResult.SRC\u IMAGE\u ANCHOR\u TYPE){ //下载并保存图像的代码 } 这在4.4之前的所有

我在WebView上实现了上下文菜单,并将保存图像作为一个选项。当用户单击该选项时,图像将在异步任务中下载DownloadImage() 在DownloadImage asynctask的doInBackground中,我有如下代码:
HitTestResult=webview.getHitTestResult();
if(result.getType()==HitTestResult.SRC\u IMAGE\u ANCHOR\u TYPE){
//下载并保存图像的代码
}

这在4.4之前的所有android版本上都运行良好。现在,我将targetSdkversion从17改为19,当点击保存图像选项时,我的应用程序开始在android 4.4上崩溃。检查崩溃日志时,我在
HitTestResult=webview.getHitTestResult()行上获得运行时异常。但如果我再次将targetSdkVersion设置为17,它在Android 4.4上仍然可以正常运行
我认为它与基于Chromium的新Android 4.4(API级别19)有某种关联。更具体地说,与此相关:

现在我想知道是应该将targetSdkversion设置为17并发布版本,还是采取其他解决方法来解决此问题?

最好的解决方案是什么?

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


在您的情况下,您似乎可以从“保存图像”菜单选项处理程序(在UI线程上运行)中获取webview.getHitTestResult().getType()的值,并将其保存为AsyncTask上的字段。

是的,您是对的。我正在从菜单选项处理程序调用async方法,以便只能在那里获取值。为此,我必须重构代码,并在异步任务中将必要的值作为参数传递。如果我采用文档中提到的方法,我可以像这样包装我的当前代码:
runOnUiThread(newrunnable(){@Override public void run(){//current code for image download and save})
这种方法行吗?@r.bhardwaj-如果代码不阻塞也不执行IO,那么它可能没问题,但我猜它最初被写为异步任务是有原因的。