美文网首页
Rexxar混合开发框架介绍

Rexxar混合开发框架介绍

作者: morning_dew | 来源:发表于2020-03-26 18:14 被阅读0次

Rexxar 是一个针对移动端的混合开发框架。现在支持 Android 和 iOS 平台。

详情可参考:https://lincode.github.io/Rexxar-OpenSource

1 缓存策略

缓存策略

2 Rexxar Container 

Rexxar Container 主要的工作是截获 Rexxar Web 的数据请求和原生功能请求。通过从 Rexxar Web 发出 HTTP 请求的方式,由 Rexxar Container 截获的方式进行通信。Native 和 Web 之间协议是由 URL 定义的。Rexxar Web 访问某个特定的 URL, Rexxar Container 截获这些 URL 请求,调用 Native 代码完成相应的功能。

2.1 RexxarWidget

作用:调用某些 Native UI 组件,例如调起一个 Toast。

实现方式:通过 WebView 回调 shouldOverrideUrlLoading 方法进行拦截。

Android官网解释:

public boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)

Give the host application a chance to take control when a URL is about to be loaded in the current WebView. If a WebViewClient is not provided, by default WebView will ask Activity Manager to choose the proper handler for the URL. If a WebViewClient is provided, returning true causes the current WebView to abort loading the URL, while returning false causes the WebView to continue loading the URL as usual.

shouldOverrideUrlLoading 主要是给WebView提供时机,让其选择是否对UrlLoading进行拦截。返回true表示进行拦截,实现自己的逻辑;返回false则表示不拦截,webview继续加载该url。

shouldOverrideUrlLoading web

另外,如果H5需要callback返回数据,Rexxar提供了原生回调H5的方法。

原生调用H5

2.2 RexxarContainerAPI

作用:给 Web 一个 Native 的计算结果。例如,给出当前位置信息。

实现方式:通过 WebView 回调 shouldInterceptRequest方法进行拦截。

Android官网解释:

public WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request)

Notify the host application of a resource request and allow the application to return the data. If the return value is null, the WebView will continue to load the resource as usual. Otherwise, the return response and data will be used.

This callback is invoked for a variety of URL schemes (e.g., http(s):, data:, file:, etc.), not only those schemes which send requests over the network. This is not called for javascript: URLs, blob: URLs, or for assets accessed via file:///android_asset/ or file:///android_res/ URLs.

In the case of redirects, this is only called for the initial resource URL, not any subsequent redirect URLs.

如果该方法返回null,WebView将会按照平常一样继续加载;否则,将会使用返回的WebResourceResponse内容,也就节省了 WebView 访问网络资源,这个方法在后面缓存会有很大作用。

shouldInterceptRequest 

Rexxar 拦截 html,js资源直接渲染进程返回,图片等其他资源先返回空的数据流再异步向流中写数据。具体逻辑可以参考RexxarWebViewClient的handleResourceRequest方法。

3 可能存在的问题

H5页面有更新,服务端更新router.json,用户可以在客户端查看到最新的界面。如果用户清除数据,并断开网络,这时再进入则只能加载预置在asset的H5页面,从而出现前后不一致的情况,当然这种情况很极端。

4 项目实现

默认从/data/data下取缓存,没有则从asset取,同时从服务器下载资源包(做版本对比)并保存到/data/data。具体流程图待补充。

相关文章

网友评论

      本文标题:Rexxar混合开发框架介绍

      本文链接:https://www.haomeiwen.com/subject/faacuhtx.html