android studio 调试时内存溢出,闪退。

最近遇到一个奇怪的问题,调试的时候出现闪退问题,抛出下面的异常。

java.lang.OutOfMemoryError
Could not allocate JNI Env

百度了下有以下解释:

OutOfMemoryError异常的常见原因有以下解释:

1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3.代码中存在死循环或循环产生过多重复的对象实体;
————————————————
版权声明:本文为CSDN博主「fish520water」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fishandbean/article/details/92768745

然后我检查了一遍又一遍的代码,问题还是没有得到解决。最后又通过百度搜索,了解到个解决办法,就是在AndroidMainifest.xml文件设置application的属性

android:hardwareAccelerated="true"
android:largeHeap="true"

虽然问题解决了,但不知道这个什么意思,之后了解到,第一个属性是开启硬件加速(问题感觉不大),第二个是请求系统为Dalvik虚拟机分配更大的内存空间(总感觉不靠谱,所以又把这个去掉了。)

后来我发现如果不通过Android studio进行调试,正常安装启动app是不会闪退的。然后无意间瞅到有个layout Intspector窗口,上面显示的就是app的画面。百度去了解了下这个是什么东西,并且先关了后再试了下调试。发现居然不会闪退了

关闭相关设置

最终问题解决了,原来是布局嵌套太多层,上传布局结构到pc,导致手机app出现大量内存的使用(占用了128m)

解决这个问题的方法: 尽量不要出现太多层的布局嵌套(比如我:一个activity承载了四五个页面的能力,类似于单页应用,各个布局通过控制布局的visibility属性来显示/隐藏;后果就是一个xml:1500行臃肿代码。)

或者调试的时候关闭ide的layout Intspector这个功能

原文地址:https://www.cnblogs.com/Dmail/p/14976493.html