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

  • 相关阅读:
    pytest常用命令行
    pytest中一些常用插件
    case运行失败进行重试-pytest-rerunfailures插件
    adb 在自动化测试中的截图
    app的冷启动和热启动
    ATX
    UI自动化中常用的三种等待
    allure
    性能指标分析
    接口自动化之接口依赖解决
  • 原文地址:https://www.cnblogs.com/Cc905/p/13498567.html
Copyright © 2011-2022 走看看