Android Location 权限管理

写了一个LocationPermissionGranter类, 用Fragment隐藏了requestPermissions和onRequestPermissionsResult回掉的部分, 实现无论在Activity还是Fragment中都简单易用,并且不受屏幕旋转等影响。 使用方法: LocationPermissionGranter(this).requirePermission(object : LocationPermissionGranter.LocationPermissionListener { override fun onLocationPermissionGranted() { showMessage("onLocationPermissionGranted") } override fun onLocationPermissionDenied(shouldShowDialog: Boolean) { showMessage("onLocationPermissionDenied

read more »

实战RxJava之combineLatest & distinctUntilChanged

最近项目中碰到了这样一个需求: 在每当Tab切换到特定页面,并满足onResume状态 构建得到的查询条件和上一次成功查询条件不一致 时,查询并获取特定的信息。 通常的做法是: 添加切换Tab和onResume的Listener,在onResume的Listener中保存onResume状态。在切换Tab的Listener触发时检查onResume状态,满足则进入下一步 构建相应的查询条件,将查询条件和上一次成功的条件进行比较,如果不一致则查询并进入下一步 查询成功时记录上一次成功查询条件,失败时重置上一次成功查询条件为空 看上去可以Work,实际上大多数运行状况中也是可以的,但这里有个隐藏的前提条件: Tab切换到特定页面的事件后,onResume状态已经被设置好了 如果不满足这个条件,那么查询永远不会执行。 实际上,我们希望无论Tab切换到特定页面和满足onResume状态的先后顺序,只要在条件满足时就进行下一步。

read more »

升级Ghost小记

这两天Ghost1.8.4发布了(2017.9.7), 下决心从0.x版本升级, 并用上Docker。 原本以为版本升级的迁移会比较麻烦, 实际上很快就搞定了。 直接参考: https://docs.ghost.org/docs/migrating-to-ghost-1-0-0 主要分为下面几步: 数据完整备份 数据导出 安装新Ghost 数据导入 自定义主题的升级 可能较麻烦的是自定义主题的升级。在

read more »

Charles调试Android 7网络请求

启用Charles SSL 首先设置Charles SSL, 这一步和其他SSL网络请求调试一样: 1. 在Proxy的Proxy Settings配置代理: 2. 在SSL Proxy Settings中配置SSL: 3. 在Help->SSL Proxy中安装自定义证书: Tips: 完成后, 本地的SSL请求应当可以在Charles正常显示。 设置Android模拟器/终端 1. 通过以下命令启动带proxy的模拟器 emulator -netdelay

read more »

Kotlin forEach隐藏开销

Kotlin中for-each有多种写法, 如常用的: for (foo in foos) { foo.thing() } foos.forEach { it.thing() } 除了对于 nullable / break 支持的区别,大部分情况下使用哪种写法纯粹是偏好: for vs forEach 然而针对Range进行枚举时要注意: forEach{} 存在着隐藏开销。 尽管 Iterable<

read more »