Pig Cat

Full-Stack, Android, AI

OkHttp拦截器实现禁止一切网络请求

拦截器玩出花。

我们在创建OkHttp客户端时,可以添加各种拦截器,这是我见过最有可玩性的库之一: OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .addInterceptor(new XXXInterceptor()) ...

OkHttp拦截器获取GET/POST请求参数并添加公共参数

拦截器玩出花。

我们在创建OkHttp客户端时,可以添加各种拦截器,真的很香: OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .addInterceptor(new XXXInterceptor()) .addInter...

OkHttp拦截器实现无网络时加载缓存,避免Unknown host异常

拦截器玩出花。

我们在创建OkHttp客户端时,可以添加接口数据缓存,真的很香: File cacheDir = ... // 缓存目录,可以是内部存储也可以是外部存储的目录 OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .cache(...

微信小程序任务栈实现原理

探寻小程序的根基。

背景 之前面试一些校招同学,聊到微信小程序是什么launchMode,其任务栈是如何实现的?很多同学只提到singleInstance,这是不合适的。 今天我们就猜测并解析一下微信主程序与小程序的关系与大致实现,最后给出源码,可以给大家作一个简单参考。 初探 既然要研究微信,那么我们就先打开几个小程序,再用adb命令看看任务栈信息。 在终端使用 adb shell dumpsys ac...

NDK开发中为什么除以0程序不崩溃?

教条不会告诉你的。

我们都知道不管是在Java还是在C++程序中,下面这段代码都会导致程序错误: int x = 10; int y = x / 0; ... 但是我今天发现了一个比较神奇的事情,把这段代码写成native方法后在Java层调用,竟然没有导致App崩溃,代码是这样子的: #include <jni.h> #include "logger.h" #ifdef __cplusp...

源码茶舍之android:externalService是什么属性?实现原理?

品味AOSP。

发现 在AndroidManifest中声明Service时,偶然发现一个布尔类型的属性:android:externalService 示例如下: <service android:externalService="true" ... /> 如果minSDK小于24,会显示警告,很显然这是一个24以后的新东西。 先顾名思义一下,external的serv...

MyBatis中插入(insert)后返回主键(key)的注解方式

那是真的牛逼。

一般我们插入数据后需要知道其自增的主键key是多少,有两种方式: 用@Options注解: 比如这里有个订单(Order)相关的DAO: public interface OrderDao { @Insert("INSERT INTO ...") @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn ...

MyBatis直接使用LocalDateTime时间类型以及MySQL时区问题排错

那是真的牛逼。

时间类型 Java 8提供了新的时间API,相关介绍大家可以自行搜索或者直接参考这篇Java中的时间与时区,因此大家在写实体类时,可以放弃用以前的Date或者Timestamp类型了,直接用LocalDateTime类就行了,MyBatis从3.4.5版本开始就完全支持这种类型了,根本不用自己再去写什么类型转换,目前网上搜到的大部分文章还是让我们自己去实现,其实不用的。 我们来看看其官方...

授权后连接MySQL依然被拒绝访问(Access denied for user 'root'@'localhost')

那是真的牛逼。

我们在Spring Boot的应用配置中一般都会如下: jdbc:mysql://123.123.123.123:3306/db_name?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true 123.123.123.123是MySQL数据库所在主机的IP地址,如果你想要远程访问数据库,就必须授权,一...

源码茶舍之由一次简单的ANR分析深入了解Context

品味AOSP。

ANR是Android的老大难了,关于这方面的基础知识和深入好文都非常多,大家不妨谷歌一下。 最近搭载骁龙855的小米9也发布了,移动平台的设备性能越来越强,许多App大多时候其实都吃不完那么多计算资源。 说得可能不好听一点,很多烂代码要是在很多年前的手机上,本该导致卡顿(甚至是ANR)的,但由于如今强大的计算性能,卡顿几率大大减小了。从某方面来说增大了程序的容错,同时也掩盖了程序本身...

Glide4.8集成现有OkHttpClient并加载https图片

知名库之间的故事。

转眼间谷歌的Glide图片加载库都4.8.0了,时间过得真的太快。 今天解决两个问题(第1个是独立问题,第2个依赖第1个): 1、Glide网络加载库(其默认为原生的API实现)集成为OkHttp,众所周知OkHttp可以帮助我们更方便地玩转网络请求; 2、让Glide可以加载https前缀的图片链接(如果你的域名证书是服务端自己瞎签的,没有认证,就过不了安全检查,表现为你用Chrome浏览...

RxJava2开发小记:先加载缓存再请求网络之简单实现

知名库之间的故事。

关于缓存 用户角度: 做客户端,大部分时候都在追求良好的用户体验,缓存,就要达到一个缓兵之计的效果。因为用户永远是“暴躁”的,页面加载要是有缓存先展示出来,用户就会安心很多。这是一种视觉上的舒服,大多数用户并不在乎这个数据从哪来。 开发者角度: 对于客户端程序来说,网络状况是未知而不稳定的,在耗时上面,一次网络请求可能大于本地数据读取好几个数量级。并且,某些及时性不高的数据,并不需要每次都...

RxJava2开发小记:用CompositeDisposable来“安排”Retrofit网络请求

知名库之间的故事。

情景 前不久项目遇到了偶现的OOM问题,看调用栈发现有RxJava相关,我们项目以RxJava2+RxAndroid+Retrofit2+OkHttp为基础设施的。 上谷歌搜了一转,最终竟踏入了RxAndroid的GitHub issue区,发现有个老外和我情景类似,原帖链接在此:https://github.com/ReactiveX/RxAndroid/issues/387, 他说他只...

使用可视化的ChkBugreport分析log文件

开阔视野。

ChkBugreport是一款专门分析Android Bugreport文件的可视化工具。 下载源码 在GitHub上把代码down下来:https://github.com/sonyxperiadev/ChkBugReport 编译jar包 在源码的core/目录下有一个createjar.sh脚本,执行它! 此时其实已经可以使用了,直接用命令...

两种方法避免Android系统更改字体大小

开阔视野。

当用户更改系统的字体大小后,App界面可能会变得面目全非,适配起来非常困难。 有的时候我们可能不需要去适配,那么就需要限制部分页面或者控件受系统字体大小更改的影响。 目前,大家在网上搜,一般都是下面的这个办法,这也是今天介绍的第一个方法,可以直接使当前Activity的所有字体大小固定: @Override public Resources getResources() { Re...

goAsync帮你在onReceive中简便地进行异步操作

开阔视野。

广播回调onReceive是在主线程跑的,所以我们不能在里面搞耗时操作,不然秒秒钟ANR。 又因为onReceive中的代码在执行完后,BroadcastReceiver对象就无效了,生命周期结束。 所以我们不能直接在里面起子线程,若应用进程被回收掉,线程的任务就可能无法完成。徒增不可控因素。 解决: 普遍的处理方式是在onReceive中再起一个IntentService去执行异步操作...

如何防止开发者选项关闭动画后使其失效

知其所以然。

很多用户为了手机用起来感觉上快,在开发者选项里把系统动画给关了,即把那3个缩放比例改成了0,系统默认一般是1x。个人建议调到0.5x就很合适了,没必要关闭,否则某些动效比较多的App体验会很差。 本文的问题就是,当开发者选项中的动画缩放比例被全部调成0后,App中部分设置了duration的属性动画就会失效,表现为直接从开头跳到了结尾,没有动画过程。 我们先分析下为什么会这样。 看Valu...

USB调试Android设备时遇到no permissions (verify udev rules)的解决办法

开阔视野。

最近在Ubuntu上调试一些Android O系统的手机,出现adb root失败的情况,明明手机已经root了。 具体就是在执行adb devices查看连接的设备时,设备后显示 no permissions (verify udev rules) 字样。 根据官网的提示,去查文档:https://developer.android.com/studio/run/device.html#s...