前言

一切就绪,开始规划API,这里在规划前对API进行了一次分类:__短期API、长期API__

首先申明下,这个是在实际框架演变过程中自创的一个概念,其它混合框架可能也会有这个概念,但应该是会在原生底层来实现,而不是前端实现。。
而这里由于是前端驱动,所以相比其它混合框架,前端多了一个处理引擎(包括多平台适配,API处理等等)

划分的凭据

根据API回调的实际执行次数来划分,执行一次自动回收的是短期API,可以执行多次的是长期API

譬如,短期回调包括:

uialert,toast等等
pageopen,reload等等
...

譬如,长期回调包括:

navigatorhookBackBtn,setRightBtn
eventregisterEvent:'resume','netChange'等等
...

而且规定,短期API执行完一次后必须自动删除引用,避免无法及时回收,长期API则不会自动回收,会一直监听直到主动取消或页面关闭

如下图

在代码层次两者有何区别?

API设计的一个原则就是尽量简单优雅,所以__在H5的调用层次来看,这两种不会有任何区别__,比如

quick.navigator.setTitle({title: '测试标题',subTitle: '子标题',success: function(result) {},error: function(err) {}
});quick.navigator.setRightBtn({isShow: 1,text: '按钮右1',which: 0,success: function(result) {/*** 按钮点击后回调*/},error: function(error) {}
});

这两个API从定义上一个是长期回调,一个是短期回调,但是在调用者看来,写法不会有区别,仍然是同一种风格的,也不会要求传递额外参数

在框架定义层次,需要区分

虽然在调用层次来看,并无区别,但是在框架内部,还是有所不同的

譬如

// 在原生调用完对应的方法后,会执行对应的回调函数id,并删除
const responseCallbacks = {};
// 长期存在的回调,调用后不会删除
const responseCallbacksLongTerm = {};

长期API在调用后,回调会添加到responseCallbacksLongTerm池中,短期AP会添加到responseCallbacks

// 这里规定,原生执行方法完毕后准备通知h5执行回调时,回调函数id是responseId
responseCallback = responseCallbacks[responseId];
// 默认先短期再长期
responseCallback = responseCallback || responseCallbacksLongTerm[responseId];
// 执行本地的回调函数
responseCallback && responseCallback(responseData);
delete responseCallbacks[responseId];

在回调执行阶段,如果是短期回调,会自动删除引用,方便垃圾处理器自动回收(里面会保证短期id和长期id不重复)

在原生容器层面两者的区别?

在H5框架层次,长期API和短期API的差距也不是很大,但是在原生层面,差距明显变大(这也是为什么会把这两种单独划分成两个概念)

为了尽可能的减少冗余信息,我们仅以navigator.setRightBtnsetTitleAPI为例,它们的前端调用我们在前面已经看到了,那么它在原生容器中的实现如下

原生中长期API是会先行监听的(考虑过调用后监听和调用前监听两种模式,最终采取了调用前监听-结合了原生原有代码考虑)

以下的伪代码基于前面的JSBridge介绍文章,这里假设已经了解了,不再赘述

注意:这里的setTitle为短期API,但是如果想要给它加上点击回调的话是需要变成长期API的,我们仅以短期的状态为例

Android容器中的对比

public class NavigatorApi implements IBridgeImpl {public static void setTitle(..., JSONObject params, Callback callback) {// 获取了参数后直接改变了导航栏的标题...// 然后开始回调callback.apply(...);}public static void setRightBtn(..., JSONObject params, Callback callback) {// 解析参数,然后将回调信息和监听函数添加到webview控制器中,这个控制器默认监听了很多事件。但只有这些回调信息添加后才会执行// 里面也包括了更改按钮的文字或图标...WebloaderControl.addPort(callback.port, 'xxx右侧按钮监听事件');}
}

WebloaderControl中的作用是监听各种事件(如利用一些天然的resume事件等),然后当对应事件触发时,只有回调池中(addPort添加进的)存在,才会执行

其中'xxx右侧按钮监听事件'是在webview自行监听的,这里就不再赘述了只需直到,WebloaderControl.addPort,右侧监听事件中才会执行添加进去的回调,否则是没有什么操作的

可以看到短期API和长期API的形态是不一样的,一个是调用后立即执行,一个是已经监听了,就等着你的回调

iOS容器中的对比

@implementation NavigatorApi
- (void)registerHandlers {[self registerHandlerName:@"setTitle" handler:^(id data, WVJBResponseCallback responseCallback) {// 同样,在执行完功能后进行回调...responseCallback(...);}[self registerHandlerName:@"setRightBtn" handler:^(id data, WVJBResponseCallback responseCallback) {// 里面也包括了更改按钮的文字或图标等一些步骤...// 同样,这里是将回调添加到缓存池中,然后监听到对于按钮点击时就会执行回调[self cacheCallback:responseCallback handlerName:@"setRightBtn"];}
}

iOS和Android中相比,虽然实现代码不一样,但是逻辑是一致的,同样在监听后才会执行对应回调

结束语

短期和长期概念只是用来更好的划分和管理API,有了这个概念后,接下来就可以开始对API进行统一规划了

返回根目录

  • 【quickhybrid】如何实现一个Hybrid框架

源码

github上这个框架的实现

quickhybrid/quickhybrid

【quickhybrid】API的分类:短期API、长期API相关推荐

  1. 各台平台电商API接口吊桶,API接口分类

    A类标准接口 淘宝API item_get 获取商品详情 根据商品ID查询商品标题价格描述等详情数据 淘宝API item_search 按关键字搜索商品 搜索关键字,显示商品总数,标题,图片,优惠价 ...

  2. 所有API接口分类,淘宝/天猫API、1688API、拼多多API、京东API、各大电商API接口及测试平台

    测试平台入口:获取Key和secret 测试地址:https://console.open.onebound.cn/console/index.php?i=Anzexi 各类接口详情: A类标准接口 ...

  3. 淘宝京东拼多多抖音1688苏宁淘特等关键词搜索商品API接口(关键词搜索商品API接口,关键词搜索商品列表接口,分类ID搜索商品列表接口,关键词搜索商品销量接口)

    淘宝京东拼多多抖音1688苏宁淘特等关键词搜索商品API接口(关键词搜索商品API接口,关键词搜索商品列表接口,分类ID搜索商品列表接口,关键词搜索商品销量接口)代码对接如下: 1.公共参数 名称 类 ...

  4. 淘宝API接口分类!!!

    淘宝API接口分类,更新时间:2020-1-3 11:19:14 A标准接口 淘宝API item_search 按关键字搜索商品 搜索关键字,显示商品总数,标题,图片,优惠价等数据 淘宝API it ...

  5. 淘宝拼多多抖音1688苏宁淘特京东等关键词搜索商品API接口(关键词搜索商品API接口,关键词搜索商品列表接口,分类ID搜索商品列表接口,关键词搜索商品销量接口)

    淘宝拼多多抖音1688苏宁淘特京东等关键词搜索商品API接口(关键词搜索商品API接口,关键词搜索商品列表接口,分类ID搜索商品列表接口,关键词搜索商品销量接口)代码对接如下: 1.公共参数 名称 类 ...

  6. 淘宝拼多多抖音1688苏宁淘特京东等平台关键词搜索商品API接口(关键词搜索商品API接口,关键词搜索商品列表接口,分类ID搜索商品列表接口,关键词搜索商品销量接口)

    淘宝拼多多抖音1688苏宁淘特京东等平台关键词搜索商品API接口(关键词搜索商品API接口,关键词搜索商品列表接口,分类ID搜索商品列表接口,关键词搜索商品销量接口)代码对接如下: 1.公共参数 名称 ...

  7. 淘宝/天猫API接口分类,1688API、拼多多API、京东API及所有电商API接口

    API接口地址 API接口分类: A类标准接口 淘宝API item_get 获取商品详情 根据商品ID查询商品标题价格描述等详情数据 淘宝API item_search 按关键字搜索商品 搜索关键字 ...

  8. 所有电商API接口分类

    A类标准接口 淘宝API item_get 获取商品详情 根据商品ID查询商品标题价格描述等详情数据 淘宝API item_search 按关键字搜索商品 搜索关键字,显示商品总数,标题,图片,优惠价 ...

  9. TF学习——TF之API:TensorFlow的高级机器学习API—tf.contrib.learn的简介、使用方法、案例应用之详细攻略

    TF学习--TF之API:TensorFlow的高级机器学习API-tf.contrib.learn的简介.使用方法.案例应用之详细攻略 目录 tf.contrib.learn的简介 tf.contr ...

最新文章

  1. 消防报警联动监控计算机中心,楼宇消防报警联动监控计算机中心实验设备
  2. 【Kotlin】变量简介 ( 可空类型 | lateinit | 初始化判定 | 非空类型 | !! 与 ? 修饰符 | ?= ?. ?: 运算符 | 抽象属性变量)
  3. 《Python Cookbook 3rd》笔记(1.13):通过某个关键字排序一个字典列表
  4. Spring Boot 2.3.3 正式发布!
  5. f2fs 设置stripe_欧洲如何在PSD2下使用Stripe实现3DS2的SCA合规性
  6. spring 事务_极限 Spring (4) Spring 事务
  7. linux查询配置基础命令,Linux查看系统配置常用命令
  8. 尚学堂轻松愉快LINUX视频教程
  9. 基于java+springboot+mysql的校园二手交易平台
  10. 一、《图解HTTP》了解Web和网络基础
  11. 【软考软件评测师】2020年下综合知识历年真题
  12. 【PostgreSQL】函数之百分位数中位数:percentile_cont()
  13. scrapy微博反爬虫_Scrapy 爬取新浪微博(解析api)
  14. android LCD背光服务修改自适应背光最低,最高亮度
  15. 电阻的温度系数需要考虑么
  16. java咪咕视频_咪咕视频免费看大片
  17. Visual C++ 使用x64编译器
  18. Jetson的mavros使用offboard模式,终端按键控制无人机飞行
  19. 什么是记录型数字压力表?被应用在哪些领域?
  20. VBA中如何清空excel工作表内容

热门文章

  1. csdn怎样设置友情链接栏目
  2. 动手学深度学习(PyTorch实现)(八)--AlexNet模型
  3. 7-5 统计大写辅音字母 (15 分)
  4. 掉入陷阱的数字 (15 分)
  5. 虚拟服务器声卡,如何使用虚拟声卡?虚拟声卡安装教程!
  6. activiti 7中文文档_如何阅读文档-以Pandas库为例
  7. concat() “+“ 和 append() 的区别
  8. flutter不支持热更新_真当Flutter不能热更新?众能动态化Flutter
  9. Linux文件查找命令find用法整理(locate/find)
  10. rman 脚本备份全过程