Json转Map的后出现ClassCastException

运行错误

测试代码

1
2
3
4
5
6
7
8
9
10
import com.google.gson.Gson
fun main() {
val map = HashMap<String, Int>()
map["key1"] = 111111
val jsonString = Gson().toJson(map)
println(map::class.java)
val hashMap = Gson().fromJson(jsonString, map::class.java)
val key1:Int? = hashMap["key1"]
println(key1)
}

运行的时候,会抛类型转换错误

阅读更多

JsonObject.optLong 导致的Bug

问题背景

业务场景存在一个JSB,FE同学传了个JSON到端上,端上测试的时候都是正确的,有天调试Server反馈说id值找不到,端上id值回传错了,开始排查代码。
发现Jsb传输过来的Json都是String to String的格式, 类似这样

阅读更多

App Debug 主线程,出现ANR后被系统Kill

痛点

笔者手上有个Reamle GT,日常开发工作中,是不是会debug,断点在主线程里面,基本被kill,没办法调试代码,自动重启给开发带来很大困扰,实在受不了,着手解决。

阅读更多

iOS如何安装旧版本app, app降级

背景

有时候,新的app版本去掉了某些功能或新加了某些功能是我们不想要的,例如新版本bilibili加了很多广告,还是想使用旧版本。大体有2个方法,都需要用到爱思助手。

阅读更多

Android开发工具推荐

自己在平时工作中发现的一些不错的工具,记录下,方便在切换外部环境的时候,快速找回持续更新

阅读更多

区分Kotlin中的 == 和 ===

测试代码

1
2
3
4
5
6
7
8
fun main() {
val list1 = mutableListOf<String>()
val list2 = mutableListOf<String>()
list1.add("sss")
list2.add("sss")
println(list1 == list2)
println(list1 === list2)
}
阅读更多

Kotlin on JVM 协程的可重入实现

1. 协程?

协程的优势就是上下文切换的优势,不用打扰到操作系统。用户自己实现协程的切换。协程可以主动让出线程的能力,让Runtime进行调度。而面对线程而言,通常不是主动让出的,而是被操作系统强制调度。操作系统是感知不到Runtime层面的协程的,也不关心是不是正在进行协程调度。线程的现场信息由操作系统维护,协程的现场信息由Runtime来维护。

  • Kotlin on JVM 的“协程”,不是真正意义上的协程 ?
  • 效果上,比在Java线程池的的Runable基础上面,Runable 不具备暂停调度可恢复的特性。Runable从开始到结束一直占用当前线程,不管是runing还是wait,而Kotlin在协程”wait“的时候,会释放当前线程。
阅读更多

快速点击StartActivity引发的误会

问题来源





在A 跳到 B ,再跳到C的过程中,一定条件下发送广播,需要把B关掉,达到的效果就是 C直接返回A。


但是现在出现一个Bug就是C返回的时候,还是B。当时没有打印onCreate的日志,只发现B在前面finish了,居然又在后面onResume了,这显然违反科学。当时想就算B启动了多个,B也都在onCreate的时候注册了广播,都应该可以收到广播的。后面怀疑是手滑不小心点击了2次,或是系统突然响应过慢,点击了多次,造成创建了多个实例,所以我直接通过for循环快速模拟这种情况。

阅读更多