Android 开发高手课
张绍文
前微信高级工程师,Tinker 负责人
52722 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 62 讲
导读 (1讲)
模块一 高质量开发 (25讲)
Android 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

练习Sample跑起来 | 唯鹿同学的练习手记 第2辑

成功实现了Alarm、WakeLock与GPS的耗电监控
成功获取了网络请求的相关信息
修改了Apply的实现以优化性能
展示了关闭虚拟机的class verify后对性能的影响
实现了观察方法的耗时
实现了给代码加入Trace Tag
实现了获取线程创建的堆栈
可以在Logcat日志中查看捕获的日志
使用动态代理对应的中实现耗电监控
通过PLT Hook代理Socket相关的几个重要函数
修改SharedPreferencesImpl的Apply部分以优化性能
展示了关闭虚拟机的class verify后对性能的影响
学习如何使用systrace + 函数插桩观察方法的耗时
学习如何给代码加入Trace Tag
展示了如何使用 PLT Hook技术来获取线程创建的堆栈
使用PLT Hook来hook libc.so的write__write_chk方法
体会到了耗电监控的重要性
了解了各种Hook技术的应用
通过实现方法学习了相关知识
耗电监控实现
网络请求信息获取
SharedPreferencesImpl优化
关闭class verify
systrace + 函数插桩
Trace Tag插桩
线程堆栈获取
Atrace日志获取
使用Java Hook实现Alarm、WakeLock与GPS的耗电监控
使用PLT Hook技术获取网络请求相关信息
修改SharedPreferencesImpl的Apply部分
关闭虚拟机的class verify对性能的影响
使用systrace + 函数插桩观察方法的耗时
学习给代码加入Trace Tag
使用PLT Hook技术获取线程创建的堆栈
使用PLT Hook技术获取Atrace的日志
使用Java Hook实现Alarm、WakeLock与GPS的耗电监控
代理Socket相关的重要函数
使用PLT Hook技术获取网络请求相关信息
全面解析SQLite
修改SharedPreferencesImpl的Apply部分
通过Hook去掉verify步骤
关闭虚拟机的class verify对性能的影响
使用systrace + 函数插桩观察方法的耗时
学习给代码加入Trace Tag
使用PLT Hook技术获取线程创建的堆栈
学习systrace的底层机制
使用PLT Hook技术获取Atrace的日志
练习6~8、12、17、19
参考资料
心得体会
实现效果
实现方法
本次练习内容
唯鹿同学的练习手记第2辑

该思维导图由 AI 生成,仅供参考

你好,我是唯鹿。
接着上篇练习手记,今天练习 6~8、12、17、19 这六期内容(主要针对有课后 Sample 练习的),相比 1~5 期轻松了很多。
该项目展示了使用 PLT Hook 技术来获取 Atrace 的日志,可以学习到 systrace 的一些底层机制。
没有什么问题,项目直接可以运行起来。运行项目后点击开启 Atrace 日志,然后就可以在 Logcat 日志中查看到捕获的日志,如下:
11:40:07.031 8537-8552/com.dodola.atrace I/HOOOOOOOOK: ========= install systrace hoook =========
11:40:07.034 8537-8537/com.dodola.atrace I/HOOOOOOOOK: ========= B|8537|Record View#draw()
11:40:07.034 8537-8552/com.dodola.atrace I/HOOOOOOOOK: ========= B|8537|DrawFrame
11:40:07.035 8537-8552/com.dodola.atrace I/HOOOOOOOOK: ========= B|8537|syncFrameState
========= B|8537|prepareTree
========= E
========= E
========= B|8537|eglBeginFrame
========= E
========= B|8537|computeOrdering
========= E
========= B|8537|flush drawing commands
========= E
11:40:07.036 8537-8552/com.dodola.atrace I/HOOOOOOOOK: ========= B|8537|eglSwapBuffersWithDamageKHR
========= B|8537|setSurfaceDamage
========= E
11:40:07.042 8537-8552/com.dodola.atrace I/HOOOOOOOOK: ========= B|8537|queueBuffer
========= E
11:40:07.043 8537-8552/com.dodola.atrace I/HOOOOOOOOK: ========= B|8537|dequeueBuffer
========= E
========= E
========= E
通过 B|事件和 E|事件是成对出现的,这样就可以计算出应用执行每个事件使用的时间。那么上面的 Log 中 View 的 draw() 方法显示使用了 9ms。
这里实现方法是使用了Profilo的 PLT Hook 来 hook libc.so 的write__write_chk方法。libc 是 C 的基础库函数,为什么要 hook 这些方法,需要我们补充 C、Linux 相关知识。
同理Chapter06-plus展示了如何使用 PLT Hook 技术来获取线程创建的堆栈,README 有详细的实现步骤介绍,我就不赘述了。
这个 Sample 是学习如何给代码加入 Trace Tag,大家可以将这个代码运用到自己的项目中,然后利用 systrace 查看结果。这就是所谓的 systrace + 函数插桩。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了唯鹿同学的练习手记第2辑,主要涉及使用PLT Hook技术获取Atrace日志、加入Trace Tag进行代码追踪、关闭虚拟机的class verify对性能的影响、优化SharedPreferences的实现、使用PLT Hook技术获取网络请求信息以及使用Java Hook实现耗电监控。通过PLT Hook技术,可以获取Atrace日志并计算应用执行每个事件所使用的时间,从而进行性能优化。另外,通过加入Trace Tag和函数插桩,可以方便地观察每个方法的耗时,实现应用的启动优化。此外,文章还介绍了关闭虚拟机的class verify对性能的影响,以及优化SharedPreferences的实现方法。最后,通过使用PLT Hook技术和Java Hook实现了获取网络请求信息和耗电监控。这些技术手段对于开发者来说具有一定的参考价值,可以帮助他们更好地进行性能优化和监控应用的各项功能。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Android 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部