zoukankan      html  css  js  c++  java
  • 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这个功能

  • 相关阅读:
    测试代码
    内网与外网间通信[转]
    向微软首席执行官史蒂夫·鲍尔默致敬
    Spring Cloud OAuth2
    Docker搭建 MySQL 主从复制
    MySQL-查询结果缓存
    网页手机wap2.0网页的head里加入下面这条元标签,在iPhone的浏览器中页面将以原始大小显示,并不允许缩放
    Mybatis一对一关联查询
    application.Properties 自定义变量 注解@ConfigurationProperties使用方法
    Hibernate中的脏检查和缓存清理机制
  • 原文地址:https://www.cnblogs.com/Dmail/p/14976493.html
Copyright © 2011-2022 走看看