本文介绍: 常见内存泄漏的场景1、非静态内部类的静态实例非静态内部类会持有外部类实例的引用,如果非静态内部类的实例是静态的,就会间接的长期维持着外部类的引用,阻止被系统回收。public class TestActivity extends Activity { private static Object inner = null; @Override protected void onCreate(Bundle savedInstanceState) { supe
常见内存泄漏的场景
1、非静态内部类的静态实例
非静态内部类会持有外部类实例的引用,如果非静态内部类的实例是静态的,就会间接的长期维持着外部类的引用,阻止被系统回收。
当点击Button时,会创建非静态内部类InnerClass的静态实例inner,该实例的生命周期会和应用程序一样长,并且会一直持有TestActivity 的引用,导致TestActivity无法被回收。
2、匿名内部类持有外部类的引用
匿名内部类也会持有外部类实例的引用
3、Bitmap对象
临时创建的某个相对比较大的bitmap对象,在经过变换得到新的bitmap对象之后,应该尽快回收原始的bitmap,这样能够更快释放原始bitmap所占用的空间。
避免静态变量持有比较大的bitmap对象或者其他大的数据对象,如果已经持有,要尽快置空该静态变量。
4、WebView
不同的Android版本的WebView会有差异,加上不同厂商的定制ROM的WebView的差异,这就导致WebView存在着很大的兼容性问题。WebView都会存在内存泄漏的问题,在应用中只要使用一次WebView,内存就不会被释放掉。通常的解决办法就是为WebView单开一个进程,使用AIDL与应用的主进程进行通信。WebView进程可以根据业务需求,在合适的时机进行销毁。
5、资源对象未关闭
6、集合中对象没清理
7、监听器未关闭
8、未正确使用Context导致被持有
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。