美文网首页
聊一聊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