最佳实践Android设计:隐藏的webview、fragment、service?
Posted
技术标签:
【中文标题】最佳实践Android设计:隐藏的webview、fragment、service?【英文标题】:Best practice Android design: hidden webview, fragment, service? 【发布时间】:2016-08-11 23:18:01 【问题描述】:我的应用程序需要执行多个 http 连接才能提供在应用程序中进一步使用的结果。我需要在此过程中使用 webview 打开链接并获取/解析生成的 html。我应该在哪里发布这些连接和网络视图的代码?请注意,中间步骤与用户无关,只有在某处失败时。
目前,我有 2 个活动:第一个执行第一个连接(在 asynctask 中),它形成需要在 web 视图中打开的 URL。我打开传递 url 的第二个活动,我在 webview 中打开 url,获取 html,并为最终结果进行另一个连接。
我想到了以下选项:合并这 2 个活动并使用隐藏的 webview?也许把所有这些都放在一个没有 UI 的片段中?还是将其编码为服务?
我不希望应用程序崩溃/冻结,例如网速很慢或连接有问题。
【问题讨论】:
我很困惑为什么你需要一个 WebView 来抓取 HTML。 HTTP 调用不起作用吗? @cricket_007 如果我进行 http 调用,我收到的数据似乎包含 javascript,然后构建最终页面。我认为……好吧……让它构建页面的最简单方法是使用 webview,然后从中获取 html。我可以在没有 webview 的情况下在应用程序中运行 javascript 吗? 我明白了。您正在处理动态网页。在这种情况下,webview 似乎是合理的。我一直使用中间 API 层进行 Web 抓取,我可以对它进行 HTTP 调用 【参考方案1】:如果您只需要从服务器获取数据(例如 REST api),那么您应该使用 OKHTTP 之类的库发出 HTTP 请求。网络请求将作为要求异步,因此不会影响 UI。您必须等待对您的请求的响应。获得响应后,解析它们。在您获得所有回复之前,您需要在应用中设置逻辑来阻止访问功能。
【讨论】:
这基本上是我现在所拥有的,但由于我在第二个活动中有一个 webview,所以我将其分为 2 个活动。结合所有这些的最佳方法是什么,因为 webview 实际上不需要向用户显示?请注意我对上面 cricket_007 的评论,说明我为什么需要(编辑)一个 webview【参考方案2】:最后,我移动了一些东西,最后仍然有 2 个活动,但第 2 个活动只包含一个 web 视图。所以从第一个活动开始,我startActivityForResult
两次(因为我需要使用 webview 两次)在第一个活动中结束。也就是说,流程如下:
Act1(用于返回链接的一个 http 作业的异步任务)-> Act2(在 webview 中打开链接并返回数据)-> Act1(使用该数据获取第二个链接)-> Act2(再次启动以获得最终结果并将其传回)-> Act1.
这当然不优雅,但它似乎是最简单的解决方案。猜一个片段会更合适,但它们对我现在的技能来说相当复杂。
【讨论】:
以上是关于最佳实践Android设计:隐藏的webview、fragment、service?的主要内容,如果未能解决你的问题,请参考以下文章