| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android性能优化三:APP启动时间测量,Android面试知识点梳理 -> 正文阅读 |
|
[移动开发]Android性能优化三:APP启动时间测量,Android面试知识点梳理 |
3.1、常规方式 3.2、AOP介绍 3.2.1、AspectJ使用 3.2.2、 Join Points 3.2.3、PointCut 3.2.4、Advice 3.2.5、语法简介: 3.3、AOP实战 1、APP启动时间测量 =========== 两种方式: 1.1、adb命令 adb shell am start -W com.example.jiajiemu.a11/com.example.jiajiemu.a11.MainActivity 先运行APP,然后退出,然后再运行如上命令: 会看到以下结果 D:\as3_ws\as3_model\summary\AndroidMianShi14>adb shell am start -W com.example.jiajiemu.a11/com.example.jiajiemu.a11.MainActivity Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.jiajiemu.a11/.MainActivity } Warning: Activity not started, its current task has been brought to the front Status: ok Activity: com.example.jiajiemu
.a11/.MainActivity ThisTime: 117 TotalTime: 117 WaitTime: 134 Complete ThisTime:最后一个Activity启动耗时 TotalTime:所有Activity启动耗时 WaitTime:AMS启动Activity的总耗时 总结:线下使用方便,不能带到线上 不严谨、非精确地时间 1.2、手动打点 启动时埋点,启动结束时埋点,二者差值 public class LaunchTimer { private static long sTime; public static void startRecord() { sTime = System.currentTimeMillis(); } public static void endRecord() { endRecord(""); } public static void endRecord(String msg) { long cost = System.currentTimeMillis() - sTime; LogUtils.e(msg + " cost " + cost + “ms”); } } 总结:精确,可带到线上,推荐使用 避开误区,采用Feed第一条展示 误区:onWindowFocusChanged只是activity的首帧绘制时间,APP启动的结束时间记在这里是不准确的。我们所要的时间,是用户真正看到整个界面的时间。 正解:真实数据展示,Feed第一条展示(即adapter中的第一条数据) 2、启动优化工具选择 ========== 两种方式互相补充 正确认识工具及不同场景选择合适的工具 2.1、traceview 2.1.1、介绍:
2.1.2、使用://开始 Debug.startMethodTracing(“文件名”); //结束 Debug.stopMethodTracing(); 生成文件在sd卡:Android/data/packagename/files 但是,在实际的APP运行中,并没有看到这个traceview文件,不知道是什么原因。 2.1.3、实战没办法实战。。。。 2.1.4、总结:
2.2、systrace 2.2.1、介绍:
2.2.2、使用:命令:python systrace.py -t 10 [other-options][categories] 官网地址:https://developer.android.com/studio/command-line/systrace#command_options 国外网址,貌似无法访问! 实际上它是一个python脚本 正确使用方式:在电脑上打开终端,输入命令: python D:\androidsdk_4_5_6\platform-tools\systrace\systrace.py -b 32768 -t 5 -a com.sutpc.appopti -o perfaormance.html sched gfx view wm am app 如下图: 我的因为装了3.7,懒得装2.7了。 就可以生成相应的文件了。 2.2.3、总结:
2.2.4、cputime与walltime的区别:
3、优雅获取方法耗时 ==========
3.1、常规方式 背景:需要知道启动阶段所有方法耗时 实现:手动埋点 具体实现: long time = System.currentTimeMillis(); long cost = System.currentTimeMillis() - time; //CPU执行的时间 SystemClock.currentThreadTimeMillis(); 总结: 侵入性强、工作量大(需在每个方法首尾写上如上方法) 3.2、AOP介绍 Aspect Oriented Programming 面向切面编程 针对同一类问题的统一处理 无侵入添加代码 3.2.1、AspectJ使用Project的build.gradle classpath ‘com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.0’ Module的build.gradle classpath ‘com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.0’ Module的build.gradle apply plugin: ‘android-aspectjx’ 3.2.2、 Join Points程序运行时的执行点,可以作为切面的地方 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 7:26:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |