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.

原文地址:https://www.cnblogs.com/caoxinyu/p/10568467.html