Android ObjectOutputStream Serializable引发的血案
遇到一个问题
安装后第二次进app,闪退
重现步骤
[前置条件]
打包分支:dev_7.13
手机:vivo NEX 8.1.0
[步骤]
安装三星app----同意用户协议进入书城---连续点击back退出app---再次进入三星阅读
[结果]
出现闪退(必现)
[期望]
能正常进入书城
附件
查看了日志,没有crash 相关的信息。那么我就相信,应该是自己程序里面的杀死了进程。
根据日志,果然是自己的程序里面杀死了进程。(因为再次进入三星阅读时候,杀死进程的log 还没有打印。)
这一步其实可以更加的确切点,就是把代码里面杀死进程的代码块删掉试下。
但是为什么只有全新安装程序的第二次启动呢?难道是什么耗时的操作在影响?
我决定打印从程序开始推出,到杀死进程这一块的执行时间。
发现,全新安装第一次推出,这个耗时非常长,大概1-2秒,但是第二次之后就会很短。
然后我就在这一段Debug.startMethodTrace();查看耗时情况。
竟然是一个ObjectOutputStream。 这个东西里面有一个list,是当前手机安装包的信息,写这个东西耗时太久了。导致进程没有杀死,然后再次点击桌面,启动app,还没启动,代码执行到杀死进程哪一行,让人感觉是崩溃了。为什么第二次第三次不耗时呢?因为写这些信息每天只会执行一次。
总结:千万不要用ObjectOutputStream 序列化大的数据,比如里面有集合等
没事不要用这个东西,尤其是android.
很多人以为这个不耗时,但是你的object 对象里面有一个map,map 里面有很多数据,你就知道多耗时了。1-3s.
泰山崩于前而色不变的曹新雨,抱歉