赞
踩
不知道我们还有多少在使用SP存储的,其实它底层就是通过IO读写操作文件,如果频繁地在主线程进行SP读写可能会造成卡顿或者ANR,之前就有过线上的ANR事故,建议大家都是用MMKV,读写速度秒杀SP;
除此之外,主线程进行网络操作也会导致ANR
2. 多线程争夺资源导致死锁
3. CPU资源耗尽
等等…
如果在我们实际的开发过程中,如果出现ANR,那么很简单,打开logcat窗口就可以查看,还有一种方式,就是查看trace日志,路径为 /data/anr/xxx
打开trace日志,通过这一部分就能猜到具体原因了,就是因为在主线程中,响应点击事件时,线程进入休眠阻塞
线下出问题对于我们来说永远都是最简单的,难的就是在线上出了问题,用户隔你十万八千里,该如何处理?
可能很多小伙伴的项目中都集成了bugly,确实bugly是很不错的线上监控组件,像Crash、ANR都能够检测到,但是很多时候,日志是不全的,堆栈信息不全就没法定位问题,bugly可以作为兜底方案,具体的监控方案,我们可以自己实现。
对于线上监控,往往有两种方式,我这边先讲解第一种,通过FileObserver监听某个目录下文件是否发生变化,这里不言而喻了,就是/data/anr/xxx,如果当前文件夹中的文件发生变化,那么意味着ANR发生了,首先我们先了解一个这个类。
@Deprecated
public FileObserver(String path) {
this(new File(path));
}
/**
/**
我们先看一下其中比较核心的构造方法,FileObserver能够监听某个路径下的文件、某个文件或者文件集合的变化,FileObserver是一个抽象类,那么我们可以实现它来监听anr目录文件的变化
ACCESS,
MODIFY,
ATTRIB,
CLOSE_WRITE,
CLOSE_NOWRITE,
OPEN,
MOVED_FROM,
MOVED_TO,
CREATE,
DELETE,
DELETE_SELF,
MOVE_SELF
})
具体的文件状态有以上这些,包括ACCESS(当前文件被访问了)、MODIFY(当前文件被修改了)、CREATE(当前文件被创建了)、DELETE(当前文件被删除了)等等
class ANRFileObserver(
val anrPath: String
) : FileObserver(anrPath) {
override fun onEvent(event: Int, path: String?) {
when(event){
ACCESS->{
}
MODIFY->{
}
DELETE->{
}
CREATE->{
}
}
}
}
这里主要是检测这4种状态,当前文件夹下内容有修改时,就将全部的trace文件上传到服务端进行日志查看。
val observer = ANRFileObserver(“/data/anr/”)
observer.startWatching()
但是这里需要注意的就是,很多高版本的ROM已经不支持当前文件夹的查看,甚至需要Root,因此此策略暂时不能应用,那么除此之外,还可以通过WatchDog来监控线程状态,从而判断是否发生ANR。
从字面意思上看,就是看门狗,其实这个是Android系统中的一种监控机制,当SystemServer进程启动,调用start方法之后,WatchDog也就启动了run方法
从上面这张图可以理解WatchDog的原理:首先WatchDog是一个线程,每隔5s发送一个Message消息到主线程的MessageQueue中,主线程Looper从消息队列中取出Message,如果没有阻塞,那么在5s内会执行这个Message任务,就没有ANR;如果超过5s没有执行,那么就有可能出现ANR。
为了帮助到大家更好的全面清晰的掌握好性能优化,准备了相关的核心笔记(还该底层逻辑):https://qr18.cn/FVlo89
https://qr18.cn/FVlo89
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
,可以添加VX:vip204888 (备注鸿蒙获取)**
[外链图片转存中…(img-YfvUpwZD-1712647249458)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。