对于androID工程师,可能对于Log底层jni部分细节不需要具体了解,用一张图来了解其实现流程:
这里涉及到三个进程:
APP进程: 调用Log的接口打日志,最终通过soctket通信发送给Logd进程
Logd进程:有一个缓冲区用于存储日志(环形缓冲区,当满时会冲掉旧的日志)
Logcat进程:可以在adb shell中创建(可以创建多个),查看缓冲区中日志的进程(AndroID Studio的logcat也是一个Logcat进程)。
环形缓冲区是一个逻辑上的循环队列,写者可以往里面写东西,而一旦有内容会通知等待队列里的读者们来读取内容,否则等待队列列处于阻塞状态。 这就意味Logcat进程读取也是阻塞形式的。
对于普通应用:实现一套自己的Log,将每次打的日志缓存起来。
对于系统应用:在应用中开启一起Logcat进程,不断的读取Logd进程中的日志到缓存中,当日质量达到一定的阈值后再刷如文件。这种方案可以搜集到所有应用的日志。
缺点:
1. 写文件 + 加密 会出现cpu峰值
2. 崩溃或者进程意外退出 缓存中的日志可能无法刷到文件中,关键崩溃信息可能丢失。
对于智能设备中专门做一个日志进程去搜集所有应用的日志,这种方案其实是简单可行的。
参考:
https://blog.csdn.net/tencent_bugly/article/details/53157830
http://ju.outofmemory.cn/entry/224106
总结以上是内存溢出为你收集整理的android 日志方案研究全部内容,希望文章能够帮你解决android 日志方案研究所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)