zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    pycharm连接mysql报错!Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' prope
    Django之视图
    Django模板语言相关内容
    Django使用ORM之多对多(四)
    Django使用ORM之一对多(三)
    018_序列化模块_什么是模块
    017_os_sys_time_collection_random 模块
    015_内置函数2
    014_内置函数
    013_生成器(yield)_列表推导式
  • 原文地址:https://www.cnblogs.com/caoxinyu/p/10568467.html
Copyright © 2011-2022 走看看