WebView会执行Http Get并下载完整文件,然后调用我的onDownloadStart()方法,我的代码会再次下载文件吗?
在Android应用程序中使用的WebView需要处理下载PDF文件。我看到的行为似乎是有道理的,但它似乎很奇怪,所以我希望有人可以验证一下。
当设置了WebView时,我们调用setDownloadListener()并创建一个新的DownloadListener来处理onDownloadStart()方法的调用。在onDownloadStart()方法中,我们使用HttpURLConnection从Web服务器获取资源。
在网络跟踪中,我看到对同一资源执行了两个Http Get请求。我认为这是因为WebView首先对资源进行Get操作,然后WebView进行自己的处理并确定它无法呈现资源。然后WebView调用onDownloadStart()方法,我们第二次检索资源。 SetDownloadListener文档说:
注册在呈现引擎无法处理内容并应下载而不是处理时使用的接口。这将替换当前处理程序。
WebView无法知道它是否可以呈现资源,直到它从服务器获得响应并读取返回的content-type。因此,它必须首先执行GET或HEAD以读取响应标头。因此,双重下载行为似乎是有道理的。
一些后续问题:
1.这是常见情况吗?大多数从WebView下载文件的应用程序真的会下载两次文件吗?(这似乎很昂贵,但我认为它可能发生)
2.是否有一种方法可以重用第一次请求中已经下载的内容,而不是再次请求它?
3.WebView为什么不在第一个请求上使用Http HEAD方法而不是GET?(我想这会使每个超链接成为一个两步过程,这也是昂贵的)
4.是否有一种方法可以防止额外的下载?也许使用shouldOverrideUrlLoading()来拦截请求?
在Android应用程序中使用的WebView需要处理下载PDF文件。我看到的行为似乎是有道理的,但它似乎很奇怪,所以我希望有人可以验证一下。
当设置了WebView时,我们调用setDownloadListener()并创建一个新的DownloadListener来处理onDownloadStart()方法的调用。在onDownloadStart()方法中,我们使用HttpURLConnection从Web服务器获取资源。
在网络跟踪中,我看到对同一资源执行了两个Http Get请求。我认为这是因为WebView首先对资源进行Get操作,然后WebView进行自己的处理并确定它无法呈现资源。然后WebView调用onDownloadStart()方法,我们第二次检索资源。 SetDownloadListener文档说:
注册在呈现引擎无法处理内容并应下载而不是处理时使用的接口。这将替换当前处理程序。
WebView无法知道它是否可以呈现资源,直到它从服务器获得响应并读取返回的content-type。因此,它必须首先执行GET或HEAD以读取响应标头。因此,双重下载行为似乎是有道理的。
一些后续问题:
1.这是常见情况吗?大多数从WebView下载文件的应用程序真的会下载两次文件吗?(这似乎很昂贵,但我认为它可能发生)
2.是否有一种方法可以重用第一次请求中已经下载的内容,而不是再次请求它?
3.WebView为什么不在第一个请求上使用Http HEAD方法而不是GET?(我想这会使每个超链接成为一个两步过程,这也是昂贵的)
4.是否有一种方法可以防止额外的下载?也许使用shouldOverrideUrlLoading()来拦截请求?