AppInterface

最近的工作主要是围绕APP与内嵌H5开发而展开的,所以写了个小框架,以期能提升客户端童鞋与前端童鞋的开发效率。具有Android与H5两部分内容,互相搭配使用,接口简洁,执行效率高,使用简便,能极大的提升开发效率。

下方是github地址:
https://github.com/yanglang1987500/AppInterface

简介

基于安卓实现的一个通过拦截请求与JSBridge的小框架,纯REST风格,基于注解与反射实现,类似于SpringMVC的Controller风格

使用指南

通过使用:

AppInterface.getInstance().init(this,"com.webview.sniyve.webview.controllers");

进行初始化工作。
第一个参数代表安卓Context对象,第二个参数是控制器所处包路径,框架会自动扫描此包路径下所有实现了Controller注解的类,并为其建立REST索引与反射并缓存。

提供两种交互方式

  • 使用URL拦截形式,此方式需要在WebViewClient实现类的shouldOverrideUrlLoading方法中进行拦截处理,直接调用
AppInterface.getInstance().handle(view,url);

即可,此方法会返回布尔值,为真代表匹配到了处理器,为假代表未匹配到处理器,理应进行放行。
* 使用JSBridge形式,此方式可以在webView实例化时直接调用

AppInterface.getInstance().initJsBridge(webView);

即可,框架会提供一个名为ApplicationInterface的js对象以供调用,js调用方法为

ApplicationInterface.call(url)。

这两种方式可以并存,怎么调都行,拦截器都会拦截并通知相应的Controller进行处理,并统一进行回调处理。

控制器写法

控制器需要继承自BaseController,并在类上加@Controller("host")注解,并且需要在相应方法上加@RequestMapping("/path")注解。
待映射的协议方法需要实现两个入参Map<String,Object> paramsAppInterfaceCallback callback,前一个是参数包,后一个是回调接口。Controller可以通过调用父类的getContext()方法获取Android上下文对象。
使用示例如下:

@Controller("common")
public class CommonController extends BaseController{@RequestMapping("/toast")public void toast(Map<String,Object> params,AppInterfaceCallback callback){String message = (String)params.get("msg");Toast.makeText(this.getContext(), message, Toast.LENGTH_SHORT).show();callback.call(null);}
}

如此便实现了一个简单的common/toast协议,所有参数都在params对象中,callback用于执行回调。
此框架建议与AppInterface.js进行搭配使用。

新增了一套框架的广播订阅机制

test包中已经给出了使用示例
具体使用方法如下:
订阅:

AppInterface.getInstance().subscribe("onClick", new Callback() {@Overridepublic void call(Map<String, Object> params) {TextView textView = (TextView) MainActivity.this.findViewById(R.id.textView);textView.setText((String) params.get("value"));}});

发布:

@RequestMapping("/order_manage")
public void orderManage(Map<String,Object> params, final AppInterfaceCallback callback){Map<String,Object> pms = new HashMap<String,Object>();pms.put("value", params.get("shopId"));AppInterface.getInstance().notify("onClick",pms);}
}

此模式可以解决不同类或不同Activity中互通事件的问题。

关于性能

实测,Nexus4手机,框架初始化12个Controller,35个协议约35ms-70ms时间,拦截请求耗时(已缓存反射的情况下)为1ms,非常快!
如此便实现了效率高,全自动的目的。

关于AppInterface.js

AppInterface.js是一个通过js调用APP的工具包,内置了一套广播订阅机制与相关接口。但是调用APP不用关心广播,只需要使用

AppInterface.call('/common/login',{user:'test',password:'test'
},function(data){console.log(data.message);
});

即可与APP进行交互,两端都是走的协议形式,不论是通过拦截请求还是JsBridge方式,最终都会解析此协议,并通知相应的Controller进行处理。AppInterface.call()内部会优先使用JsBridge形式,如果APP环境未提供此功能,则使用发送请求的形式,最终达到的效果是一致的,AppInterface.js所提供的call功能不论是对于安卓还是对于iOS都是兼容的。

最终的目标就是js端只需要按照约定的协议调用call方法,App端只需要实现相应协议的Controller类与协议方法即可。

AppInterface,一套Android与H5的混合开发框架相关推荐

  1. android studio运行手机时出错怎么解决_小程序 android ios h5解决方案

    你现在开发android,ios,小程序用什么工具,怎么开发的?还在单个端的开发吗?今天我们主要讨论的是一次开发多端使用的技术,也是这两年比较流行的开发方向.现在的终端太多了,app两个端androi ...

  2. WebView详解与简单实现Android与H5互调

    为什么要学习Android与H5互调? 微信,QQ空间等大量软件都内嵌了H5,不得不说是一种趋势.Android与H5互调可以让我们的实现混合开发,至于混合开发就是在一个App中内嵌一个轻量级的浏览器 ...

  3. Android 系统(229)---Android与h5交互专题

    [Android开发进阶系列]Android与h5交互专题 1 交互原理 1.1 webview如何加载H5页面 我们都知道在Android中是通过webView来加载html页面的,根据HTML文件 ...

  4. 安卓Android与H5双向交互MathJax展示数学公式(源码+解析)

    安卓Android与H5双向交互MathJax展示数学公式(源码+解析) 博主就今天周五又做了个需求(安卓Android与H5交互),原来上线的功能是服务器配置过来的学习报告(一个H5页面)并提供原始 ...

  5. Android 与 H5 数据的传递

    最近项目开发使用了 Android 原生和 H5 的混合开发,以前也没怎么接触过.所以这次和 H5 联调对接还是踩了很多坑,这里也做个总结希望可以帮助到大家... 首先 Android 和 H5 主要 ...

  6. Android+webview+h5 拍照闪退问题

    Android在某些机型中拍照闪退 最近一个Android的项目,使用webview+H5的混合开发模式.这样的模式主要是开发周期端,而且避免了机型兼容的问题.在实际使用中却发现了另外一些问题. 问题 ...

  7. Android与H5交互探索之旅

    周一清早,某技术(对接我司业务SDK的技术)在有我司boss的微信群火急火燎地艾特我说为什么H5的回调 SDK 这边收不到?看到消息的我内心瞬间那是焦虑的一P,飞奔公司打开电脑双击IDE,心想别人用的 ...

  8. Android Webview H5 秒开方案实现

    本文首发于微信公众号「玉刚说」 原文链接:Android Webview H5 秒开方案实现 前言 现在许多app都嵌入了H5页面, 然而WebView加载速度慢这个问题却一直影响着用户的体验, 所以 ...

  9. android 和h5交互,Android中与H5的交互

    Android日常开发中,常常会遇到加载H5页面的情况,于是少不了与H5页面的交互问题.具体表现在Android调用H5代码及H5中调用Android代码两种情况. 测试页面 test.png 这里我 ...

最新文章

  1. 计算机教师资格证报考科目,还在纠结报考教师资格证该选哪个科目呢?看完这篇,你不再迷茫...
  2. hdu1914 稳定婚姻问题
  3. 用 W32DASM看IF高级语法
  4. 01-二维数组中的查找
  5. libevent的两个服务端、客户端示例(C语言)
  6. python中如何获取类的属性,python – 获取类的属性
  7. Fashion Mnist中的softmax应用
  8. jfinal 和bjui 常用前后交互方式
  9. 我的世界旅行者地图服务器不显示,我的世界旅行者地图怎么没有传送 | 手游网游页游攻略大全...
  10. 电池充放电设备招投标解决方案
  11. LeetCode - Trangle
  12. 什么是集体户口,优势、劣势
  13. 二叉树的前序遍历、中序遍历、后序遍历
  14. 浅谈git rebase命令 -- git修改历史提交信息
  15. opengl显示北斗七星源代码
  16. 图像处理----图像模糊(高斯模糊)
  17. RMAN实战1:RMAN备份数据库、控制文件、参数文件、FRA、归档日志
  18. 效率源大容量硬盘检测修复程式 v3.0 光盘版 怎么用
  19. Flash For Server[FFS]
  20. volatile c 关键字

热门文章

  1. c语言取变量数据类型,C语言数据类型和变量
  2. 用WinFlash工具更新BIOS版本
  3. iPhone存储速度测试软件,13个软件打开速度测试,7部手机中iPhoneX只排第二
  4. HTML_超级链接详细讲解
  5. android4.4.4linux内核下载,Android 4.4源码下载
  6. java 源文件 编译jar_将java源文件制成jar包
  7. Spring5利用视图解析器生成Excel文件
  8. AP微积分与其跟着学校倒不如先跟着林老师学一一遍----美高学生如何说
  9. Oracle又裁员!工作10年,却被裁员!
  10. 如何计算无人机机架对应螺旋桨大小和尺寸!