这篇文章主要介绍了Android H5通用容器架构设计详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
背景
大家如果经历过Hybrid项目的开发,即项目中涉及到H5与Native之间的交互,那么很有可能会遇到各种各样的H5容器。为什么会有那么多各种各样的容器呢...这也是轮子多的通病了,轮子多到业务方不知道选哪个。当然,也有可能大家压根就不会使用到H5容器,直接用系统WebView就完事儿了,比如我的前东家就是这样做的。那这篇文章的主题就是与前者相关的:当项目中拥有很多个H5容器时,怎样封装才能让业务侧用得爽呢?
下面按惯例,抛出这篇文章要解决的三个问题:
- 如何优雅地提供接口调用?
- 怎样封装多个不同类型的H5容器?
- 这样的架构能带来什么样的好处?
术语对齐
| 术语 | 描述 |
|---|---|
| H5框架容器 | 特指目前项目中正在使用的二方/三方H5容器。 |
| H5通用容器 | 特指将项目中所有的框架容器抽象到一个容器中,让业务侧不需要感知到具体的框架细节。 |
| A页面 | url query参数中带a=true的页面,项目中用A容器承载。 |
| B页面 | url query参数中带b=true的页面,项目中用B容器承载。 |
探索
如何优雅地提供接口调用?
业务侧调用的接口其实很有限,可以说90%的业务都只是打开一个网页而已。
我们根据业务需要新建一个接口类:
/**
* WebPage服务接口类
*/
public interface IWebPageService {
/**
* 打开url
* @param url
*/
void openUrl(String url);
/**
* 创建Fragment内置到某页面中使用
* @return
*/
Fragment buildFragment(String url, Context context);
/**
* 获取当前Url
* @return
*/
String getCurrentUrl();
/**
* 给h5发通知
* @param eventData
* @param eventName
*/
void postNotificationToJS(String eventName, String eventData);
}以上列举了4个非常常见的接口。如果有需要,还可以扩展其它的,比如设置容器生命周期相关的监听、设置H5发通知来时的监听等等。拿openUrl的实现举例,实现类通过url中的参数判断需要打开A容器还是B容器。
@Override
public void openUrl(String url) {
// 若url中含有A参数,则用A容器打开
// if (urlParamHasA) {
// startAContainer();
// } else {
// 否则用B容器打开
// startBContainer();
/
织梦狗教程
本文标题为:Android H5通用容器架构设计详解
基础教程推荐
猜你喜欢
- iOS开发教程之XLForm的基本使用方法 2023-05-01
- 解决Android Studio突然不显示logcat日志的问题 2023-02-04
- Flutter手势密码的实现示例(附demo) 2023-04-11
- Android多返回栈技术 2023-04-15
- IOS应用内跳转系统设置相关界面的方法 2022-11-20
- IOS 播放系统提示音使用总结(AudioToolbox) 2023-03-01
- android studio按钮监听的5种方法实例详解 2023-01-12
- Android中的webview监听每次URL变化实例 2023-01-23
- Android开发使用RecyclerView添加点击事件实例详解 2023-06-15
- Flutter绘图组件之CustomPaint使用详解 2023-05-12
