美文网首页
聊一聊AS3.0上分析内存泄漏

聊一聊AS3.0上分析内存泄漏

作者: 哎一不小心就 | 来源:发表于2019-01-09 17:52 被阅读0次

    一、点击如图按钮,安装你要分析的app

    Profile 'app'

    二、显示如下图片,分别是cpu渲染ui所花费的时间,内存占用情况,网络请求的状况。这里主要聊MEMORY。

    Android Monitor

       三、测试内存泄

        1.这里我故意动态注册了一个广播,没有注销。

    内存泄漏代码

            2.多次开启关闭页面,然后手动GC(垃圾回收,下次聊一下垃圾回收),这里本来因为泄漏导致内存不会被回收,然后GC之后,内存占用情况应该不会减少,但是没有达到预期效果,很尴尬,没关系,这里我们去看当前堆栈的情况。

    手动GC与查看当前堆栈的情况

            3.找到当前泄漏代码的类,点击,右边会出现有多次泄漏如图

    出现内存泄漏

            好了这里你就可以用AS去检查内存泄漏了。

            最后说下会造成内存泄漏的情况,以及解决方式

    1.Handler,因为Handler和Message、MessageQueue的关系,如果有Message未被处理,那么未被处理的Message和Handler的引用会被MessageQueue持有。

    解决方式:在使用Handler的界面销毁是调用removecallback()取消任务。

    2.上下文,比如在静态代码里面传了上下文,由于静态的生命周期很长会导致上下文不会被回收。

    解决方式:使用application的上下文

    3.内部类,内部类会默认持有外部对象的引用

    解决方式:内部类采用静态修饰。

    4.注册但是未注销,例如广播

    解决方式:注册之后,记得注销。

    5.资源对象没有关闭,例如cursor,io流等

    解决方式:调用close()、destroy()、recycler()等

    5.向集合里面添加对象,没有置空

    解决方式:在界面销毁的时候对象置空。

            除了AS给我们提供的工具去检测内存泄漏,还有一些第三方也可以帮我们去检测内存泄漏,例如leakcanary。

    相关文章

      网友评论

          本文标题:聊一聊AS3.0上分析内存泄漏

          本文链接:https://www.haomeiwen.com/subject/lhdgrqtx.html