首页 >> 学识问答 >

内存泄露是如何产生的(内存泄露)

2023-04-08 11:48:21

问题描述:

内存泄露是如何产生的(内存泄露),求解答求解答,重要的事说两遍!

最佳答案

推荐答案

2023-04-08 11:48:21

你们好,最近小活发现有诸多的小伙伴们对于内存泄露是如何产生的,内存泄露这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。

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模式来完成同样的功能,同时避免内存。

以上就是内存泄露这篇文章的一些介绍,希望对大家有所帮助。

  免责声明:本答案或内容为用户上传,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。 如遇侵权请及时联系本站删除。

 
分享:
最新文章