内存泄露是如何产生的(内存泄露)
你们好,最近小活发现有诸多的小伙伴们对于内存泄露是如何产生的,内存泄露这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。
1、 在Android的开发中,我们经常使用Handler来控制主线程UI程序的接口变化,使用起来非常简单方便,但是如果不注意的话很容易造成内存泄露。
2、 众所周知,处理程序、消息和消息队列是相互关联的。处理程序通过发送消息与主线程交互。如果处理程序发送的消息没有被处理,
3、 消息和发送它的处理程序对象将始终由MessageQueue持有,这可能会导致处理程序不被回收。
4、 这是一个标准的singleton模式的编写方法。表面上看没有问题,但是细心的同学会发现,在构建这个singleton的实例时,需要传入一个上下文。这时候传入的上下文就很关键了。如果此时传入了活动,
5、 因为上下文的实例会一直持有,所以当活动进入后台或者打开设置中未保留的活动时,活动会被销毁,但是singleton持有其上下文引用,活动不能被销毁。
6、 导致内存泄漏。
7、 如果此时传入的上下文是ApplicationContext,由于ApplicationContext的生命周期与app一致,所以不会导致内存泄漏。
8、 但是我们不能指望使用这个单例的用户总是传入预期的上下文,所以我们需要调整这个单例设计。
9、 可以在构造函数中将mContext的赋值改为this . m context=context . getapplicationcontext;当然,你也可以直接阻止用户在上下文中传递。
10、 重构Singleton,在构建Singleton时移除上下文,避免在外部使用它的人传入错误的参数。
11、 当然,也可以把InnerClass单独作为一个内存,写成singleton模式来完成同样的功能,同时避免内存。
以上就是内存泄露这篇文章的一些介绍,希望对大家有所帮助。
免责声明:本文由用户上传,如有侵权请联系删除!
猜你喜欢
- 01-03
- 01-03
- 01-03
- 01-03
- 01-03
- 01-03
- 01-03
- 01-03
最新文章
- 01-03
- 01-03
- 01-03
- 01-03
- 01-03
- 01-03
- 01-03
- 01-03