今年你因为YYYY-MM-dd被锤了么?
背景:使用YYYY-MM-dd
,还是yyyy-MM-dd
结论:使用yyyy-MM-dd
分区名 | 解释 |
---|---|
/system | 操作系统预留,用来存储系统文件和框架 |
/data | 存储用户数据 |
/cache | 系统升级过程使用的分区或者recovery |
/vendor | 用来存储厂商对Android系统的修改 |
/storage | 外置或者内置sdcard |
当JVM出现致命错误时,会生成一个错误文件 hs_err_pid<pid>.log
文件,其中包括了导致 JVM crash 的重要信息,可通过分析该文件定位到导致 crash 的根源。此文件默认会生成在工作目录下。也可以通过 jvm 参数指定生成路径(JDK6中引入):
1 | -XX:ErrorFile=./hs_err_pid<pid>.log |
约束布局ConstraintLayout 是一个ViewGroup,可以在Api9以上的Android系统使用它,它的出现主要是为了解决布局嵌套过多的问题,以灵活的方式定位和调整小部件。从 Android Studio 2.3 起,官方的模板默认使用 ConstraintLayout。
1 | private SparseArray<ListBean> selecteds = new SparseArray<>(); |
ANR
问题,对于从事 Android
开发的同学来说并不陌生,日常开发中,经常会遇到应用乃至系统层面引起的各种问题,很多时候因为不了解其运行原理,在面对该类问题时可能会一头雾水。与此同时,因为现有监控能力不足或获取信息有限,使得这类问题如同镜中花水中月,让我们在追求真理的道路上举步维艰。如下图:
前文,我们通过线上案例对影响 ANR
问题的六大场景进行剖析,这几类场景基本覆盖了线上大部分问题,详见ANR 案例分析集锦。同时我们选取了较多 NativePollOnce
场景的案例,便于大家更好理解,ANR
时看到的 NativePollOnce
场景的问题,并不是导致 ANR
的根本问题。
在前文,我们对ANR 设计原理及影响因素进行了介绍,并对影响 ANR 的不同场景进行归类。但是依靠现有的系统日志,不足以完成复杂场景的问题归因,而且有些信息从应用侧无法获取,这就导致很多线上问题更加棘手。因此我们在应用侧探索了新的监控能力,以弥补信息获取不足的短板。同时对日常分析过程中用到日志信息和分析思路进行总结,以帮忙大家更好的掌握分析技巧,下面我们就来看看相关实现。
在前文,我们用了较多的篇幅介绍了ANR 设计原理及影响因素,并根据不同场景进行了分类,如:当前消息严重耗时,历史消息耗时严重,业务异常密集执行,进程内资源抢占,进程间资源抢占等场景。为了应对系统监控能力不足以及应用侧获取信息受限的情况,我们在应用侧实现了一套消息调度监控工具,重点监控主线程的“过去,现在和将来”,同时结合相关日志对 ANR 问题的分析思路进行了总结。