Android混合开发,html5自己主动更新爬过的坑
如今使用混合开发的公司越来越多,尽管出现了一些新技术,比方Facebook的react native、阿里的weex,但依旧阻挡不了一些公司採用h5的决心。当然,这也是从多方面考虑的选择。
在三年前就使用过html5混合开发,当时做的是一款贵金属软件,涨跌五线谱、乾坤交易,还有各个股市的信息,那时候还是上波牛市爆发的前夕,哎。。。
近期公司让用h5混合开发。一些页面和功能有h5分担,最初时候放在本地assets目录下,后来因为前端同事频繁改动和更新。再加上数据安全方面考虑,决定把包放在server。採用接口返回字段,推断是否须要下载更新。接下来就谈下开发中遇到的几个坑。给自己做个笔记,也分享给须要的朋友。
首坑:Android系统
对于h5的混合开发,Android系统就是个大坑,三年前接入h5点时候,那时候好多手机卡的跟ppt似的,4.0后Google进行了一些优化,效率上确实好了非常多。但后面又来了一系列巨坑。比方4.3之前一个内核,4.3一个单独内核,4.3之后又是一个内核,原生的WebView没法做到总体兼容,最后採取了一个方案。使用大企鹅的x5内核,长处例如以下:
- 里面类名和方法名,和原生的名称差点儿是一样的,使用更方便
- QQ和微信都是採用x5内核,内核共享。不须要单独下载
- 兼容性相对较好
二坑:DownloadManager。
最初的方案是採用系统下类DownloadManager,既然是系统提供的,非常多码友肯定认为非常OK的。可是爆破部队瞎搞,三星的手机系统却把DownloadManager的api删了。这尼玛就恶心了,你还是继续玩爆炸吧。。。
三坑:webview载入不显示
之前放在assets的时候。页面显示的非常6,换成下载到本地读取,竟然不显示了,打印下路径,没问题。那就能够确定问题出在了载入过程了。查了下资料发现。能够是用loadData。这样的方法须要先将html文件读取出来。以字符串传入loadData,能够展示页面,可是不会引用css、js等文件。也能够使用loadUrl。只是须要注意,这里因为是使用本地数据,所以传入的url须要做些处理,比如:
- 假设html文件存于assets:则加前缀:file:///android_asset/
- 假设html文件存于sdcard:则加前缀:content://com.android.htmlfileprovider/sdcard/
PS:content前缀可能导致异常,直接使用file:///sdcard/ 或者 file:/sdcard也能够
四坑:特殊字符的转义
有一个页面。iOS同事那边一直显示正常,Android这边怎么都出不来,相同页面不同数据的页面就显示页面。当时就认为非常奇怪,不应该是h5点问题。要不iOS也不会显示,打印了URL一看,擦,URL中有一个”%”,转义后便OK了。当然,依据须要另一些特殊字符也须要转义。”%”仅仅是一个个例。
五坑:部分手机报错不显示
A WebView method was called on thread ‘JavaBridge’. All WebView methods must be called on the same thread。
这是因为部分手机WebView中方法必须在同一个线程。通过打印Thread.currentThread()便知不属于同一个线程。解决方式:
mWebView.post(new Runnable() {
@Override
public void run() {
mWebView.loadUrl("javascript:" + data);
}
});
代码还未从公司项目中剥离,眼下不上传了,如有错误或者补充,多多不吝赐教。
Android混合开发,html5自己主动更新爬过的坑的更多相关文章
- uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式
前言: 关于H5的调用Android原生方法的方式有很多,在该片文章中我主要简单介绍三种与Android原生方法交互的方式. 一.H5+方法调用android原生方法 H5+ Android开发规范官 ...
- Android 混合开发 的一些心得。
其实所谓这个混合开发,也就是hybird,就是一些简单的,html5和native 代码之间的交互.很多电商之类的app里面都有类似的功能, 这种东西其实还是蛮重要的,主要就是你有什么功能都可以进行热 ...
- android混合开发,webview的java与js互操作
android原生应用,用webview加载应用中的网页,并且java代码与js代码可以互相操作. 这是混合开发的基石,最基本也最重要的东西,实验代码在这里. 概括说说—— java调js:调用web ...
- Flutter与Android混合开发及Platform Channel的使用
相对于单独开发Flutter应用,混合开发对于线上项目更具有实际意义,可以把风险控制到最低,也可以进行实战上线.所以介绍 集成已有项目 混合开发涉及原生Native和Flutter进行通信传输,还有插 ...
- [Hybrid App]--Android混合开发,Android、Js的交互
AndroidJs通信 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !imp ...
- uni-app&H5&Android混合开发一 || 最全面的uni-app离线打包Android平台教程
前言: 为什么会写这么一个教程,因为很久之前做过一个对接银行POS我们的系统是使用的H5开发的app应用.但是假如对结果银行相关业务的小伙伴应该都清楚,银行的业务相对于其他的对接方而言安全性比较高,而 ...
- 分享微信开发Html5轻游戏中的几个坑
这段时间团队一直在做微信端的一些产品设计和开发,当然也包含一定的运营工作.做过的东西也不少,微名片.微抢票.微活动.微招聘等一些小case. 今天想说的是我们在微信中被玩的最活跃的轻游戏--微刮奖,这 ...
- Unity和Android混合开发
通用的流程 https://blog.csdn.net/zhangdi2017/article/details/65629589 应用场景 Unity游戏中一些功能需要安卓系统的支持,如搜索wifi等 ...
- flutter 与 android 混合开发
现有的混合开发方式,都是存flutter项目在android系统或者iOS上面跑. 但是,实际情况是,我们需要在一个成熟的native项目上面,跑几个flutter页面,逐步的进行flutter的融合 ...
随机推荐
- 【洛谷】4317:花神的数论题【数位DP】
P4317 花神的数论题 题目背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 题目描述 话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我 ...
- hihocoder #1015 KMP
#include<stdio.h> #include<iostream> #include<math.h> #include<string.h> usi ...
- ROS知识(19)----写一个简单的pluginlib例子
参考资料: 官方教程:Writing and Using a Simple Plugin
- 基于Landmark的人脸对齐以及裁剪方法
利用Landmarks进行人脸对齐裁剪是人脸检测中重要的一个步骤.效果如下图所示: 基本思路为: a.人脸检测 人脸的检测不必多说了,基本Cascade的方式已经很不错了,或者用基于HOG/FHOG的 ...
- spring---aop(2)---Spring AOP的JDK动态代理
写在前面 spring 事务是springAOP 的一个实现.我们以分析spring的事务,来分析spring的AOP实现. 基本知识 如果目标方法被spring的事务声明,则执行该目标方法的对象就会 ...
- ESB的几个基本概念
京-星之泪: 请教一个问题:esb中路由和管道对的概念应该怎么理解,各自有什么用途,他们之间的关系 北京-kimmking: transport endpoint inbound outboun ...
- maven 自动部署到 tomcat7
多方搜索,终于使maven项目可以自动发布到tomcat下了. tomcat7 需要使用 tomcat-maven-plugin 的新版本,版本支持tomcat6和tomcat7,groupId也由o ...
- 腾讯旗下网站的很多URL都包含“cgi-bin”,是什么意思?他们后台用什么语言?
cgi-bin 这很有可能说明后台是C/C++写的. 动态Web技术刚出来的时候, 服务器调用本地应用程序处理http请求的技术. 通常是C/C++程序. 后来有了新的web开发技术后这类用的就比较少 ...
- IT程序猿们,我该做什么选择呢
这个时刻,我想我遇到人生小拐点了,程序猿到了30岁,到达了一个分界线了,现在的我该何去何从呢? 先谈下简单的情况吧: 来这个公司2年了,之前因为身体的原因,不想那么累,于是选择了一份维护的工作,就来了 ...
- iOS上使用自己定义ttf字体
项目中想使用第三方的字体,在stackoverflow上查询解决的方法,也折腾一会,加入成功,示比例如以下: 1.将xx.ttf字体库增加project里面 2.在project的xx-Info.pl ...