- 博客(53)
- 收藏
- 关注
原创 Android不集成sdk直接调起原生地图App 路径规划、导航
在我们App开发过程中,经常会有一个优化用户体验的需求:查看某个地址时,给用户提供出路径规划,进行导航。如果本身App不属于LBS应用的话,为了一个小功能点就去集成各大地图SDK,有点杀鸡用牛刀的感觉,增加了apk的体积,得不偿失。那么大家第一个想到的是官方有提供不用集成sdk,就能调起地图App的方式呢?答案是有的:下面给出常用的2大地图SDK商 Api地址:高德地图 https://l...
2018-10-15 02:29:22
2510
原创 Android内存泄露之非静态内部类|匿名内部类 默认持有外部类的引用
什么是内存泄露?Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收。也就是说,一个对象不被任何引用所指向,则该对象会在被GC发现的时候被回收;另外,如果一组对象中只包含互相的引用,而没有来自它们外部的引用(例如有两个对象A和B互相持有引用,但没有任何外部对象持有指向A或B的引用),这仍然属于不可到达,...
2018-09-19 12:11:44
3858
1
原创 Android内存泄露之InputMethodManager mNextServedView导致的内存泄露
E/MessageQueue: IdleHandler threw exception java.lang.NullPointerException: Null reference used for synchronization (monitor-enter) at com.syinix.android.b.ca.a(IMMLeaks.java:74)atcom.sy...
2018-09-11 11:52:03
2338
6
原创 npm ERR! cb() never called! 解决办法
执行npm i 命令时,出现了npm ERR! cb() never called!错误 解决方案: 1、首先清除你的npm缓存: sudo npm cache clean -f 一般情况执行完后再试下 应该就OK了 2、如果1方法不奏效的话,只能采用升级覆盖安装:清除完缓存后,安装最新版本的Node helper: npm install -g n 告诉助手(n)安装最新的稳定...
2018-09-07 20:54:01
52183
1
原创 bash: react-native: command not found
RN搭建开发环境 Yarn是 Facebook 提供的替代 npm 的工具,可以加速 node 模块的下载。React Native 的命令行工具用于执行创建、初始化、更新项目、运行打包服务(packager)等任务。 出现bash: react-native: command not found问题,执行下面的命令就OK了 npm install -g yarn react-native-...
2018-09-07 20:34:03
4536
2
原创 不透明度百分比 16进制值对照表;rgb色值16进制转化原理
不透明度 16进制值100% FF 95% F2 90% E6 85% D9 80% CC 75% BF 70% B3 65% A6 60% 99 55% 8c 50% 80 45% 73 40% 66 ...
2018-09-01 21:56:48
4074
原创 Android布局优化之ConstraintLayout
ConstraintLayout是属于Android Studio 2.2的新特性,现在使用As构建默认的Activity,其对应的页面根布局已由RelativeLayout替换成ConstraintLayout,可见官方对其的推荐程度。<?xml version="1.0" encoding="utf-8"?><android.support.constraint.Con...
2018-08-30 01:28:04
523
原创 Android布局优化之 ViewStub 、include、merge 使用及源码分析
我们先看一个Activity的页面布局结构: 从上可以看出平常咱们实际绘制的页面布局其实是处在第3层。一、includeinclude标签就是为了解决重复定义相同布局的问题。 例如页面中常用到的标题栏,它几乎是用在所有页面的顶部,在不使用include的情况下咱们需要在每个界面加标题栏的xml代码,显得很繁琐,这时候就会想到封装、复用,include标签就应运而生了,我们只需要...
2018-08-30 00:13:27
767
原创 Regular、Normal、Medium、Light 对应的font-weight值
开发中设计师所出的设计图描述字重的地方往往是这样的: 如上2图描述字重的地方用的是Regular,知道这对应的font-weight值是多少吗?字体粗细:‘font-weight’属性名称: font-weight取值: normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 8...
2018-08-28 22:13:13
59950
4
原创 WebView 打印web端的console日志(如console.log)
在Android Webview中如何打印web端的console日志呢?1.调试Web应用程序 Debugging Web Apps 如果您使用运行Android 4.4或更高版本的设备测试您的网络应用,则可以WebView使用Chrome开发者工具远程调试您的网页,同时继续支持旧版Android。有关更多信息,请参阅Android上的远程调试2.利用WebChromeClient o...
2018-08-27 17:45:57
23689
原创 RecyclerView 通用Adapter添加头部、尾部 参考ListView的源码实现(二)
前面一篇RecyclerView 通用Adapter添加头部、尾部 参考ListView的源码实现(一)文章中的实现的RecyclerBaseAdapter是有一些缺陷的,它只适用于头部、尾部ItemViewType类型为仅为一种。 后面稍微改进了一下,允许多ItemViewType,但是需要开发者保证头部View、尾部View、正常View的ItemViewType不重复,实际开发中类型也不会...
2018-08-25 19:17:47
564
原创 在React-Native、React中 设计模式之模板方法模式的应用
大家在写Java、Android程序时,肯定都会用到设计模式之模板方法模式(一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现)。 搭Android框架时,都会去写一个基类BaseActivity:基类:public abstract class BaseActivity extends AppCompatActivity { @Override protected voi...
2018-08-24 22:45:57
966
原创 InteractionManager.runAfterInteractions 手势左滑退出后 不再触发回调
前面一篇文章Navigator 过渡动画卡顿的解决方案,提到了 InteractionManager.runAfterInteractions这个解决方案。InteractionManagerInteractionmanager可以将一些耗时较长的工作安排到所有互动或动画完成之后再进行。这样可以保证JavaScript动画的流畅运行。应用这样可以安排一个任务在交互和动画完成之后执行:...
2018-08-24 19:39:36
3168
原创 ios Rn0.44 Xcode9 ScrollView下拉距离过短或下拉刷新后 不能自动回弹、复位置顶
早期做RN的时候是基于0.44版本的,后面做需求迭代版本时候因人手不够也没去主动升级,一直拖到近期才升级到0.55+,且还未完成兼容测试。但目前因为有个小需求需要捉急上线,于是就还在老分支上开发,然后打包上线(用的Xcode 8.3)。 接着坑来了,从 2018 年 7 月开始,所有新的 iOS 应用程序和更新到应用商店的更新都必须使用 iOS 11 SDK 构建。 新分支RN虽然升级了但还未...
2018-08-23 02:26:06
1034
原创 h5 ios中软键盘弹起后 fixed定位失效
position: fixed;在ios手机中会存在一个失效情况: 如果页面有输入框存在,点击输入框软键盘弹起后会发现原先fixed定位在顶部的View不见了,ran’h
2018-08-21 15:20:17
8919
1
原创 h5 移动端 监听软键盘弹起、收起
前面一篇博客 h5 安卓 键盘弹起界面适配 修改webview高度提到了在Adnroid中如何监听软键盘的弹起与收起,是利用的窗口的高度发生变化 window.onresize事件来做突破点的,但是ios中软键盘的弹起收起并不触发window.onresize事件。 总结: 1.在ios中软键盘弹起时,会引起$(‘body’).scrollTop值改变,但是我们可以通过输入框的获取焦点情况来...
2018-08-21 13:18:32
35694
14
原创 React-Native Navigator 过渡动画卡顿的解决方案
在Rn0.44版本之前,路由导航跳转几乎是使用的是Navigator组件,在0.44版本以后就不推荐使用了,官方推荐的是react-navigation,当然还是可以在废弃的库中找到: import { Navigator } from 'react-native-deprecated-custom-components'首先Navigator动画是由Js线程(单线程特点)控制。我们来脑补一...
2018-08-14 16:50:08
3701
原创 RecyclerView 通用Adapter添加头部、尾部 参考ListView的源码实现(一)
首先我们看下以前的ListView是如何实现addHeaderView、addFooterView 1.先看ListView.setAdapter(ListAdapter adapter) 方法 2.再看addHeaderView、addFooterView方法 以上2个方法中都用到了wrapHeaderListAdapterInternal方法,见下图 现在我们可以看出最终实...
2018-08-12 12:21:12
2415
原创 参数名按ASCII码大小排序 冒泡算法实现
上一篇博客签名算法 待签名参数按照字段名的ASCII码大小排序 Android、JS中实现中提到的排序方法实现都是利用系统的api,在这里想用一下底层算法来实现:1.先看系统api实现 String[] data = new String[]{"key", "ba","ba", "ac", "bb","bbc","ccce","ccc"
2018-08-12 00:30:32
2788
原创 签名算法 待签名参数按照字段名的ASCII码大小排序 Android、JS中实现
验签是作为一个api接口避免裸奔的必要手段之一,原理就是前后端约定一套签名规则,首先前端在请求api接口时会增加一个sign参数,其值来源是对所提交的参数按照约定的签名规则去生成;接着后端同样会针对其接收到的参数(除sign外)按照约定的签名规则也生成一个sign,然后对2者进行比较,如果不一致则认为此次请求是未非法无效的,不予处理。参考微信公众平台的签名算法:签名生成规则如下:参与签名的字...
2018-08-11 22:27:11
6068
原创 优化Webview加载速度 TBS(腾讯浏览服务X5内核) | VasSonic(提升H5首屏加载速度)
浏览增强 传统系统内核(Webview)存在适配成本高、不安全、不稳定、耗流量、速度慢、视频播放差、文件能力差等问题,这是移动应用开发商在进行Hybrid App开发时普遍面临的难题。腾讯浏览服务基于腾讯X5内核解决方案(包括内核和云服务),能够有效解决传统移动web技术面临的普遍问题,同时能极大扩展应用(Hybrid App)内浏览场景的服务能力。 安全 腾讯浏览服务为应用浏览场景提供...
2018-08-02 13:23:10
5501
原创 css 0.5px 间隔细线 | border 细线的实现 参考WeUI
在Android中系统是识别0.5dp的,但是在web中浏览器内核在遇到0.5px时会向上取整为1px。 前端UI设计的间隔线都是设计0.5px,这时候用border-bottom: 1px solid #e6e6e6; 效果还是很粗的,UI复核页面的时候肯定不过关的。 下面说一下参考WeUI的解决方案: WeUI间隔线 先看WeUI源码的实现 提取核心:.weui-...
2018-07-31 17:55:16
9685
原创 getBackground().setAlpha(0)引发的血案 页面背景变灰色底
开篇先扯下场景哈,大家应该都见过一个很常见的UI交互,默认进一个页面看见顶部TitleBar背景是透明的,随着向上滑动查看底下内容的时候,TitleBar背景逐渐变不透明直至不透明度100%; 为了实现这个效果,我们通常的做法是监听向上滚动的距离,然后跟设定的某个最大滚动距离去求百分比,再把这个得到的不透明度百分比设置给TitleBar的Background。上代码:if (scrollY...
2018-07-27 00:22:42
1848
1
原创 gradle使用技巧(def定义变量 rootProject.ext 添加全局变量)
在主app目录下的build.gradle中我们可以这样写:def packageTime() { return new Date().format("yyyy-MM-dd")}def versionMajor = 1def versionMinor = 1def versionPatch = 0android { compileSdkVersion rootPro...
2018-07-19 19:56:03
36665
6
原创 gradle自动生成BuildConfig类的妙用
说BuildConfig类之前,先谈谈通常会遇到的场景: 1.Log打印日志这个需求,通常大家都会写一个LogUtils工具类,暴露一些常用的log.e log.d log.i等方法, 在方法会用到一个静态常量去作为开关。 2.Api接口地址的变换这个需求,通常都是写一个类里面放上一个静态常量表示Api的地址,然后我们是需要debug模式运行时采用测试环境Api接口地址,在打release包...
2018-07-17 20:40:36
10852
3
原创 build插件升级到gradle3.0+ 多渠道打包applicationVariants、compile语法更换
随着AndroidStudio升级到3.0+,自带的build插件也从2.x升级到3.x时代,有升级就会有调整,下面把遇到的语法改变列出:针对依赖资源库: compile =》 implementation dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.an...
2018-07-16 15:36:10
16231
原创 Android 多点触控 RadioGroup + Fragment 实现的底部Tab 能防止用户同时点击多个button而只响应一个有效事件吗?
Android底部导航栏(底部Tab)是一个Android程序员入门必须会实现的一个功能点,在Material Design(基于Android 5.0 API level 21)设计出来之前大家实现底部Tab通常会用FragmentTabHost或RadioGroup方式。而在有了 Android Support Library (com.android.support:design:xx.x...
2018-07-02 02:06:54
827
原创 okhttp-3.10.0 build错误:Type `org.conscrypt.Conscrypt` was not found, it is required for default
错误信息:Type `org.conscrypt.Conscrypt` was not found, it is required for default or static interface methods desugaring of `okhttp3.internal.platform.Platform okhttp3.internal.platform.ConscryptPlatform...
2018-06-30 11:35:29
8568
原创 AndroidStudio3.0+ 混淆 Warning:`-keep class *extends java.lang.annotation.Annotation { *; }`
环境:AndroidStuio 3.1.2gradle 插件版本:'com.android.tools.build:gradle:3.1.2'在混淆打包的过程中,日志中出现了红色警告:Warning: The rule `-keep public class *extends java.lang.annotation.Annotation { *; }` uses exten...
2018-06-29 15:45:05
10390
2
原创 react react-native 日期插件 m-date-picker / rmc-date-picker的使用
m-date-picker 基于 React,提供了 iOS 风格的日期选择方式,与原生 Datepicker 非常相似。 主页: https://github.com/react-component/m-date-picker Demo: http://react-component.github.io/m-date-picker/examples/popup.html 推荐: ★★★★★...
2018-06-20 20:44:40
7564
4
原创 webview http劫持的一点拦截 截取host方法 matcher.group理解
先来了解下常见的网络劫持:dns劫持(域名劫持) 现象就是用户不能访问目的网址或访问的是假网址。http劫持 现象就是用户访问的看到的页面可能是被恶意修改过的,比如常见的在底部弹出宣传性的广告或者直接某网站的内容。本质是在正常的数据流中插入精心设计的网络数据报文,目的是让用户端程序解释“错误”的数据。以前做的一款App,今天被客户方投诉在上海地区出现了打开网页后接着跳转某赌博Ap...
2018-06-15 00:11:44
3898
原创 npm 常用命令 查看版本、安装、卸载
npm list // 查看本地已安装模块清单npm list [packageName] // 查看本地已安装模块版本npm info [packageName] //查看模块的详细信息 包括各版本号等npm view [packageName] version // 查看模块远程最新版本npm view [packageName] versions // 查看模块远程所有版本np...
2018-06-13 11:40:49
11449
原创 git branch git tag git merge git checkout git fetch 常用命令
1.配置git信息 git config --global user.name 'demo' //设置用户名 git config --global user.email 'xxx@qq.com' //设置用户邮箱 ssh-keygen -t rsa -C xxx@qq.com //生成SSH加密密钥----------2.建立版本仓库git init //当前路径建立版本仓库...
2018-06-12 16:18:18
804
原创 Android学习博客集锦
JakeWharton: github地址:https://github.com/JakeWharton 代表作:retrofit,butterknifechrisbanes: github地址:https://github.com/chrisbanes 代表作:ActionBar-PullToRefresh, PhotoView, Android-BitmapCache, Andro...
2018-06-11 23:55:45
772
转载 Android 优秀开源项目汇总
Android 优秀开源项目汇总有那么多漂亮好用的轮子,总是忍不住好好地总结分类收藏一番。而收藏,当然是为了在可能需要的时候能够迅速果断地找到一个合适我们项目的轮子。分类二级分类框架名称简介Star 数最近更新UI刷新SmartRefreshLayout智能下拉刷新框架[详细]12k1天UI刷新Android-PullToRefres...
2018-06-11 13:28:32
1273
原创 h5 App通信 轻量级方式
一般在遇到h5主动通知App的需求,Android的同学可能会使用 webview.getSettings().setJavaScriptEnabled(true); webview.addJavascriptInterface(new JavaClass(this), &amp;amp;amp;quot;XXXX&amp;amp;amp;quot;); 将方法暴露给JavaScript 这种方式与h5,但是这种方式在android4.2以前是有安全漏...
2018-06-06 23:20:26
1046
原创 input maxlength 属性不起作用
大家经常会遇到限制某个输入框的最大长度的需求,比如一个要求输入手机号的输入框:&amp;lt;input type=&quot;text&quot; placeholder=&quot;请输入手机号码&quot; maxlength=&quot;11&quot; /&amp;gt;如果是上面的写法的话,maxlength属性是有效的。但是type=”text”有一个不好的体
2018-06-05 22:39:37
41794
3
原创 input onchange事件不触发 oninput onpropertychange onchange 实时监听
做前端的同学,经常会跟输入框打交道,免不了要做实时监听文本输入的需求。Android中实现obj.addTextChangedListener(new TextWatcher() { @Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {...}@Ove...
2018-06-05 17:21:30
6399
1
原创 brew nvm 安装指定版本node
一般通过brew install node 安装的都是相对brew版本的最新版,这时候我们想切换指定的node版本时,就比较麻烦了,网上之前说的安装brew tap brew tap homebrew/versions 目前已失效了homebrew/versions was deprecated 那么我们还有其他途径吗?有的,通过nvm:brew install nvm //...
2018-06-01 14:45:51
2947
原创 mac 安装Node、npm 升级Node、npm
先看Node.js中文网对Node、npm的定义Node.js中文网 Node npm 安装npm在Node v0.6.x版本之后,内建于Node系统。通过npm可以协助开发者安装、卸载、删除、更新Node.件,并且可以通过npm发布自己的插件。那么就好办了,先安装Node后就自带npm了。通过官网直接下载Node的.pkg包 中文官网download 官网download...
2018-05-31 16:31:22
33395
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人