美文网首页
Crash & OOM

Crash & OOM

作者: 大海孤了岛 | 来源:发表于2017-09-04 00:27 被阅读85次

Crash

.闪退(Crash)是客户端程序在运行时遭遇无法处理的异常或错误时而退出应用程序的表现,请从crash发生的原因分类与解决方法、
在出现crash后如何捕捉并分析异常这两个问题给出自己的解决方案

原因分类
  • 虚拟机Error:一些虚拟机无法处理而抛出的异常,比如常见的stackoverflow和oom
  • RuntimeException:比如常见的NullPointException、ArrayIndexOutOfBoundException和ClassNotFoundException等
  • 非运行异常:比如FileNotFoundException
  • Android特有属性:比如使用主线程进行耗时操作,比如网络请求
image.png
解决方案
  • 正确并有效地使用异常
    具体明确地抛出异常,而不是为了简单抛出一个Exception;
    提早抛出异常,比如在文件操作时,需要对filename进行检查;
    延迟捕获,不要过早地吃掉异常

  • 使用Android进程中的UnCaughtExceptionHandler(未捕获异常处理器)对象
    自定义一个UncaughtExceptionHandler对象,并设置为当前进程的UncaughtExceptionHandler对象,重写UncaughtExceptionHandler
    方法来在闪退前获取导致闪退异常的详细信息。

  • 使用第三方解决方案:比如Bugly、ACRA等。

OOM

APP发生OOM的原因以及如何避免

1.内存压力过大
  • 加载大量图片,导致内存不足: 对图片进行压缩,并采用软引用方法
  • 重复创建大量的view,比如listview的使用convertview和viewHolder
2.作用域不同,导致垃圾回收器无法回收
  • 非静态内部类隐性持有外部类的引用
  • context泄露:不要对Context-Activity长时间的引用(若要使用,必须保证和activity相同的生命周期);尽量用Application-Context;
3. 资源对象没有关闭
  • 常见的资源对象比如cursor, stream
  • bitmap对象使用后不回收
  • 调用registerReceiver后,销毁活动时没有调用un方法。

如何避免内存泄露

  • 使用缓存技术,比如LruCache或DiskLruCache,对象重复并频繁创建时使用对象池,比如Volley源码中定义ByteArrayPool作为byte数组的缓存池
  • 对于引用生命周期不同的对象,采用软引用或弱引用
  • 对于资源对象,一定要关闭
  • 内存压力过大,就需要统一管理内存

相关文章

  • Crash & OOM

    Crash .闪退(Crash)是客户端程序在运行时遭遇无法处理的异常或错误时而退出应用程序的表现,请从crash...

  • Android优化总结

    目录介绍 1.OOM和崩溃优化1.1 OOM优化1.2 ANR优化1.3 Crash优化 2.内存泄漏优化2.0 ...

  • OOM问题

    体现APP稳定性的重要数据就是Crash率,众多crash种最棘手最难定位的是OOM问题。APP中所有的内存泄漏都...

  • Probe:Android线上OOM问题定位组件

    体现App稳定性的一个重要数据就是Crash率,而在众多Crash中最棘手最难定位的就是OOM问题。本文主要分享美...

  • 网页设计 - 收藏集 - 掘金

    免费且又精致的 HTML/CSS 站点模板 - 前端 - 掘金&l...

  • Android 图片资源的目录 -- 一个背景图片引发的内存 O

    在开发中应用突然crash, 从日志上看是解压图片内存不足导致发生了OOM。 Caused by: java.la...

  • OOM了

    异常原因分析:Canvas绘制bitmap需要的内存太大了,OOM了,直接就crash了。 导致原因1:图片太大了...

  • java.lang.RuntimeException: Canv

    异常原因分析:Canvas绘制bitmap需要的内存太大了,OOM了,直接就crash了。 导致原因1:图片太大了...

  • 定位JAVA进程被kill的原因

    哪些原因可能会导致JAVA进程被kill呢? Java应用程序的问题:发生OOM导致进程Crash JVM自身故障...

  • Android ANR & OOM

    1. ANR ANR全名Application Not Responding,也就是“应用无响应”。如果你的应用程...

网友评论

      本文标题:Crash & OOM

      本文链接:https://www.haomeiwen.com/subject/kdjsjxtx.html