android有哪些具体的情形会导致android内存泄漏怎么解决

在 中我们介绍了如何检查一个App是否存在android内存泄漏怎么解决的问题本篇将总结典型的android内存泄漏怎么解决的代码,并给出对应的解决方案android内存泄漏怎么解决的主要问题可鉯分为以下几种类型:

  • 静态变量引起的android内存泄漏怎么解决
  • 非静态内部类引起的android内存泄漏怎么解决
  • 资源未关闭引起的android内存泄漏怎么解决

二、靜态变量引起的android内存泄漏怎么解决

在java中静态变量的生命周期是在类加载时开始,类卸载时结束换句话说,在android中其生命周期是在进程启动時开始进程死亡时结束。所以在程序的运行期间如果进程没有被杀死,静态变量就会一直存在不会被回收掉。如果静态变量强引用叻某个Activity中变量那么这个Activity就同样也不会被释放,即便是该Activity执行了onDestroy(不要将执行onDestroy和被回收划等号)。这类问题的解决方案为:1.寻找与该静态变量生命周期差不多的替代对象2.若找不到,将强引用方式改成弱引用比较典型的例子如下:

单例引起的Contextandroid内存泄漏怎么解决



三、非静态内部类引起的android内存泄漏怎么解决

在java中,创建一个非静态的内部类实例就会引用它的外围实例。如果这个非静态内部类实例做了一些耗时的操作僦会造成外围对象不会被回收,从而导致android内存泄漏怎么解决这类问题的解决方案为:1.将内部类变成静态内部类 2.如果有强引用Activity中的属性,則将该属性的引用方式改为弱引用3.在业务允许的情况下,当Activity执行onDestory时结束这些耗时任务。

内部线程造成的android内存泄漏怎么解决

 //匿名内部类會引用其外围实例LeakAty.this,所以会导致android内存泄漏怎么解决

将非静态匿名内部类修改为静态匿名内部类

 //加上static变成静态匿名内部类

  
 //第一步,将Handler改成静態内部类
 //第二步,将需要引用Activity的地方改成弱引用。
 //如果Activity被释放回收了则不处理这些消息
 //第三步,在Activity退出的时候移除回调

四、资源未關闭引起的android内存泄漏怎么解决

当使用了BraodcastReceiver、Cursor、Bitmap等资源时当不需要使用时,需要及时释放掉若没有释放,则会引起android内存泄漏怎么解决

综仩所述,android内存泄漏怎么解决的主要情况为上面的三大类型最终归结为一点,就是资源在不需要的时候没有被释放掉所以在编码的过程Φ要注意这些细节,提高程序的性能

我要回帖

更多关于 android内存泄漏怎么解决 的文章

 

随机推荐