IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 启动优化 -> 正文阅读

[移动开发]Android 启动优化

启动命令耗时

// adb shell am start -S -W 包名/启动的Acitivity
adb shell am start -S -W com.dss.simple/com.dss.simple.MainActivity
Stopping: com.dss.simple
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.dss.simple/com.dss.simple.MainActivity }
Status: ok
LaunchState: COLD
Activity: com.dss.simple/com.dss.simple.MainActivity
TotalTime: 2398
WaitTime: 2404
Complete

TotalTime:表示新应用启动的耗时,包括新进程的启动和 Activity 的启动(一般只需要关心这个就行)
WaitTime:总的耗时,包括前一个应用的 Activity pause 的时间和新应用启动的时间

优化方向

1. CPU Profile 观察耗时的操作

主要利用 Trace Java Methods 跟踪 Java 方法,在运行时检测应用,以在每个方法调用开始和结束时记录一个时间戳。系统会收集并比较这些时间戳,以生成方法跟踪数据,包括时间信息和 CPU 使用率。

Flame Chart

提供一个导致的调用图表,用来汇总调用堆栈。横轴显示的是百分比数值。由于忽略了时间线信息,Flame Chart 可以展示每次调用消耗时间占用整个记录时长的百分比。 同时纵轴也被对调了,在顶部展示的是被调用者,底部展示的是调用者。此时的图表看起来越往上越窄,
就好像火焰一样,因此得名: 火焰图。

在这里插入图片描述
从下往上找到我们的自己的代码,横轴越长,说明消耗的时间越长。

w:放大
s:缩小
a:向左移动
d:向右移动

Top Down Tree

更精确的时间信息,显示一个调用列表,在该列表中展开方法或函数节点会显示它调用了的方法节点。
在这里插入图片描述
找到我们的代码,展开看我们每一个方法消耗的时间,进行优化。

  • Self Time:运行自己的代码所消耗的时间
  • Children Time:调用其他方法的时间
  • Total Time:前面两者的时间之和
Debug API

除了直接使用 Profile 启动之外,还可以借助 Debug API 生成 trace 文件。

class MyApplication : Application() {

    init {
        Debug.startMethodTracing("debug_trace")
    }
    
    // ...
}

class MainActivity:AppCompatActivity(){

    override fun onWindowFocusChanged(hasFocus: Boolean) {
        super.onWindowFocusChanged(hasFocus)
        Debug.stopMethodTracing()
    }
    
    // ...
}

运行 App,则会在 sdcard 中生成一个 debug_trace.trace 文件(需要读写权限),在 Android Studio 中查看这个文件即可。

2. 合理使用异步初始化、延迟初始化、懒加载机制

将一些第三方 SDK,或者不必要那么早初始化的数据异步、延迟或懒加载。

3. 启动过程避免耗时操作

主要是 IO、网络 等操作,如果有较大的 SP,也应该注意

4. 类加载优化

5. 黑白屏问题(用户体验优化)

添加 windowBackground 提升用户体验

6. 简化布局

减少布局层级,去掉不必要的嵌套,merge

7. StrictMode 严苛模式

StrictMode是一个开发人员工具,它可以检测出我们可能无意中做的事情,并将它们提请我们注意,以便我们能够
修复它们。
StrictMode最常用于捕获应用程序主线程上的意外磁盘或网络访问。帮助我们让磁盘和网络操作远离主线程,可以
使应用程序更加平滑、响应更快。

class MyApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        if (BuildConfig.DEBUG) {
            // 线程检测策略
            StrictMode.setThreadPolicy(
                StrictMode.ThreadPolicy.Builder()
                    .detectDiskReads() // 读、写操作
                    .detectDiskWrites()
                    .detectNetwork() // or .detectAll() for all detectable problems
                    .penaltyLog()
                    .build()
            )
            StrictMode.setVmPolicy(
                StrictMode.VmPolicy.Builder()
                    .detectLeakedSqlLiteObjects() // Sqlite 对象泄漏
                    .detectLeakedClosableObjects() // 未关闭的 Closable 对象泄漏
                    .penaltyLog() // 违规打印日志
                    .penaltyDeath() // 违规崩溃
                    .build()
            )
        }
    }
    
    // ...
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-31 16:45:30  更:2021-07-31 16:48:12 
 
开发: 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年5日历 -2024/5/7 8:40:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码