zoukankan      html  css  js  c++  java
  • Android应用上的anr和crash

    内存泄漏

    内存泄漏:程序在向系统申请分配内存空间后,在使用完毕后未释放,结果导致一直占据该内存单元但是无法调用,直到程序结束

    内存溢出(OOM):程序向系统申请内存空间超出了系统能给的。

    大量的内存泄漏会导致内存溢出。

    内存

    静态存储区(方法区):存放静态变量、常量、全局static数据

    栈区:当方法被执行时,方法体内的局部变量都在栈上创建,并在方法执行结束时这些局部变量持有的内存将会自动释放。每个线程分配一个栈区,执行到一个新的方法时,创建一个帧,存放方法的局部变量和对象的引用和返回地址,当方法执行结束时,frame将会从栈中删除,其占有的内存空间也被释放。当所有的栈都清空时,程序也随之运行结束。

    堆:动态内存分配,这部分内存在不使用时将会由回收器负责回收。JVM只有一个堆区会被所有线程共享,存放对象本身。

    垃圾回收(GC):GC可以自动清理堆中不再使用的对象,如果对象不再有引用指向,那么该对象就无从处理或者调用该对象,这样的对象称为不可到达,垃圾回收用于释放不可到达的对象所占据的内存。但是如果持有对象的强引用,垃圾回收器将无法在内存中回收这个对象。

    内存泄漏的根因:持有对象的强引用,而又没有及时释放,内存单元一直被占用。

    ANR

      应用程序主线程在超时时间内,没有处理完输入事件或者特定操作,就会出现anr。这时Android会弹窗提示用户应用无响应,用户可以选择关闭这个程序或者继续等待。系统打印trace.txt日志在/data/anr文件夹下。

    anr的种类

    1.主线程对输入事件(键盘操作,触摸事件)在5s内没有处理完成。

    2.主线程在执行BroadcastReceiver的onReceive函数时10秒内没有执行完毕

    3.主线程在执行Service的各个生命周期函数时20秒内没有执行完毕

    3种anr都会在log中打印消息,但是只有第一种anr才会触发弹窗提示。

    crash

    java crash和native crash

  • 相关阅读:
    IE6下不能定义1px高度的容器和IE6 双边距
    py django 渲染前端打包的视图
    关于常见的递推关系。
    题解:一些递推的题。
    题解:极值问题。
    题解:城南树林。
    题解:论编辑器的和谐共处。
    题解:左右横跳。
    题解:斑马,斑马(zebra)
    找 前端 私活
  • 原文地址:https://www.cnblogs.com/Cc905/p/13498567.html
Copyright © 2011-2022 走看看