今天由测试同学反映两款手机(红米,三星GS4,均搭载Android 4.2.2)存在WebApp中收到回调后软键盘自动收起。
经过一段时间的研究,发现在Android 4.2.2上WebView.loadUrl()被调用后WebView会认为新的一个页面即将打开,而将软键盘收起。
android填坑之旅还要继续……
love coding, love life
今天由测试同学反映两款手机(红米,三星GS4,均搭载Android 4.2.2)存在WebApp中收到回调后软键盘自动收起。
经过一段时间的研究,发现在Android 4.2.2上WebView.loadUrl()被调用后WebView会认为新的一个页面即将打开,而将软键盘收起。
android填坑之旅还要继续……
android 5.0上WebView开始默认阻止Mixed Content,且不再接受第三方的cookie。所以为了你以往的WebApp里边的内容可以正常访问,需要使用WebSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW) 和CookieManager.setAcceptThirdPartyCookies({your_webview}, true) 来放开这一限制。
当然最好是让你的页面不再存在mixed content,不再依赖第三方cookie最为完美。
最近遇到了一位很热心的用户,反映C208B011版本的Huawei X1(想想MediaPad系列本人几年前在华为也曾参与研发)上无法使用一个WebApp。debug后发现在该系统的WebView内的JS里无法使用console.log()导致严重的java-js之间的通信机制缺失。特意为其创建一个BridgePolicy类来维护之,若是该款机器,则切换至window.alert来实现java-js之间的通信,否则则使用console.log()。
测试发现该机器的C208B009版本的WebView并无此问题(且与硬件,基带是3G或4G均无关)。
第一次face to face面对我们的用户感触颇多,一个产品对于他们家里的人是如此重要,一个WebApp不能用又如此大程度的影响到他,因为存在这个问题甚至想换掉这部手机。
用户对于解决问题的意愿极强。他(40岁左右的大叔)多次上Huawei X1论坛与其他用户交流看法和规律,寻求解决方案,为此去了解该机器的CPU,基带,ROM版本……。
幸运的是,他们使用的是我们这个首屈一指的互联网公司的产品,遇到了我们这样的团队,得以面对面的反映他遇到的问题——没有抱怨,而是尽可能为我们提供他“调查”,“摸索”出来的规律。
比如创建一个用户时只有在不存在的时候才需要插入,查了好久,终于搞明白:
|
pqsql在这点上真叫一个繁琐!
用了clojure,才发现北方有一座高山……
今天网站中需要做一个小功能,通过restful api请求另外一个内部网站的数据,但是写这个网站的同学给出的数据是[[a b c] [d e f]…]另外还有一个用于代表每一项的链接的links: [link1 link2 link3…]
需要将之每项对应合并起来,找了下发现map-indexed非常适合这个场景:
|
PostgrepSQL 9.4开始支持了jsonb数据类型,从而支持了一部分nosql特性。今天使用了下,简要记录下:
记得在pgadmin中验证下postgresql的版本号:
|
确认是9.4以上。
确认之后可以在SQL终端继续感受下:
|
创建一个jsonb类型的字段:
|
其中datadoc是我想存为json格式的字段的名称,为了支持后续的检索,为其创建索引:
|
其中的jsonb_path_ops是为了支持对jsonb字段的值进行检索,条件过滤(比如包含有特定的key-value对的记录)所必需的。
插入一条测试数据:
|
通过包含条件查询之:
|
更多的关于json/jsonb类型的函数和操作符的资料请见这里。
因为要与java后端协作,数据库得建成UTF-8编码的。折腾了半天,实在是没有办法,改了locale,重新安装postgresql-server,最终通过命令行指定编码和模板(这点很重要)这样蒙混过关:
命令行:
|
然后确认下:
在android的开发中,我们不时需要客观的测量和评估android应用程序的帧率。这篇文章我打算分享下这几天我在这方面的尝试:
1) fps meter
这个软件是我使用最早的,但是对手机的要求很高。第一是root,root完毕也不是每个手机上都能很好的工作。现在小米的MIUI对于root这件事是越来越不大方了,所以也更加添加了使用的难度。
root成本高昂,root完毕仍然不一定适用于所有的手机。所以只能忽略之。
2) dumpsys
dumpsys是android系统提供的用于dump系统服务的状态信息的命令行工具。
给它提供gfxinfo参数时,它能在Logcat输出中给出UI相关的性能数据。但是M以前版本的android自带的dumpsys工具只能给出120帧的时序信息。且需要手动合并时间值。
例如systemui模块的UI方面的信息如下:
|
这些数据采样的时间太短,且需要进一步的加总才能可视化。所以不是很方便。
Google似乎也意识到了这一点,在M Preview中他们支持了累计的帧率数据:
|
但是适用面太窄了,只能在android M中使用。
3) GameBench
这个工具目前来看用起来很方面,且直接给出了可视化结果,非常人性化且可靠。上个截图:
使用步骤:
|
在PC上运行设置过程(注意:需要使用jdk8,不然jar包会报错),直到出现以下成功界面:
Luminus web项目默认会启用anti-forgery特性以防止跨站攻击,极大增强了安全性。但是也为一些异步发生(不是来源于服务端的输出页面)的请求(ajax)带来了不便。
可以如下解决之:
若你的网页模板是经由selmer layout的,它会自动带上这个anti-forgery token。你便可以在js中添加如下代码
|
Luminus框架的anti-forgery middleware也可以接受http header中的”X-CSRF-Token”指定的token。
这样子就把token给带到服务端了。让ajax请求顺利发出。
environ可以很方便帮我们管理项目中的各种配置,但是最近在使用的时候遇到了一个问题,就是我在dev, test profile下配置的database-uri到打出uberjar之后就访问不到了。最后看了下源码,在生产环境下,需要通过进程环境变量或Java系统属性来完成这一目的:
进程环境变量:
|
Java系统属性:
|