文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android架构师之路之App启动性能速度优化

2024-12-03 02:04

关注

一、浅谈启动性能优化原因

1、引起性能问题的原因

随着项目不断的快速迭代,往往会造成App启动卡慢现象,因为可能在App主进程启动阶段或者在主界面启动阶段放了很多初始化其他业务的逻辑,而这些业务落地可能一开始并不需要用到;

2、为什么要做启动速度优化

二、分析怎么做启动优化

1、启动过程简单分析

App从点击桌面图标到我们看到App的主界面整个过程中经过了哪些步骤,哪些地方是我们可以优化的地方;

下图是App启动过程的一个大概描述

2、从启动过程找出优化点

App启动过程中我们优化的地方包括主进程启动流程和主界面启动流程,主进程启动就是Application的创建过程,主界面启动就是MainActivity的创建过程;

只需要分别对这两个部分进行优化即可:

3、统计耗时操作

函数耗时统计工具之Hugo

Hugo项目是一个调试函数调用耗时的工具,通过对方法或者类添加@DebugLog注解,在运行时会将函数的耗时打印在控制台中,通常用于排查函数耗时,或者用于卡顿检测;

①使用方法

项目根目录build.gradle添加hugo插件依赖

  1. classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1' 

②主工程或者library的录build.gradle中声明hugo插件

  1. apply plugin: 'com.jakewharton.hugo' 

复制代码可通过配置开启或关闭hugo功能。

  1. hugo { 
  2.   enabled false 

③在类或方法上声明@DebugLog注解

  1. @DebugLog 
  2. public String getName(String first, String last) { 
  3.   SystemClock.sleep(15); 
  4.   return first + " " + last

④运行程序会在控制台会打印函数耗时日志:

  1. getName [16ms] = "testtest" 

其实 hugo项目很简单,后续我们会讲解怎么自己写一个;

三、优化步骤

1、Application中加入异步线程

是把不必要提前做的操作放到异步线程中去做,也就是我们经常做的异步加载;

下面简单写个代码示例

  1. public class StartUpApplication extends Application { 
  2.     @Override 
  3.     public void onCreate() { 
  4.         // 程序创建时调用,次方法应该执行应该尽量快,否则会拖慢整个app的启动速度 
  5.         super.onCreate(); 
  6.         onSyncLoadForCreate(); 
  7.     } 
  8.     @Override 
  9.     protected void attachBaseContext(Context base) { 
  10.         super.attachBaseContext(base); 
  11.         onSyncLoad(); 
  12.         onAsyncLoad(); 
  13.     } 
  14.     private void onSyncLoadForCreate() { 
  15. Logutils.log("onSyncLoadForCreate "); 
  16.         Thread.sleep(200);模拟阻塞200毫秒 
  17.     } 
  18.     private void onSyncLoad() { 
  19. Logutils.log("onSyncLoad "); 
  20.           Thread.sleep(200);模拟阻塞100毫秒 
  21.     } 
  22.     public void onAsyncLoad() { 
  23.         new Thread(new Runnable() { 
  24.             @Override 
  25.             public void run() { 
  26.                 // 异步加载逻辑 
  27.             } 
  28.         }, "ApplicationAsyncLoad").start(); 
  29.     } 

2、主页面加入异步线程和延迟加载功能

与Application的优化思路一样,也是封装onSyncLoad和onAsyncLoad方法对现有代码进行一个分类,但是这两个方法的调用时机要晚一点,是在主界面首屏绘制完成的时候调用。这个步骤也需要new一个Thead,属于额外的开销,不过这不影响我们整体性能;

3、态加载布局:主布局文件优化

把主界面中不需要第一次就用到的布局全部使用动态加载的方式来处理,使用ViewStub或者直接在使用时动态addView的方式;

4、主布局文件深度优化

如果做了上面这些优化还是会发现进入主界面还是有些慢,那么需要重点关注主布局文件了。主布局文件的复杂度直接影响到了Activity的加载速度,这个时候需要对主布局文件进行深度优化了;

Activity在加载布局的时候,会对整个布局文件进行解析,测量(measure),布局(layout)和绘制(draw),所以设计简单合理的布局尤为重要。几个重要的优化如下:

5、页面功能的分模块化和懒加载

总结:

优化是一条持续之路,通过优化我们可以了解到影响启动性能的因素有哪些,这样我们平时在编码的过程中就会多注意自己的代码性能;

其实优化还有很多办法,比如资源文件的优化、耗性能的写在c++层、合理的设计模式等等,我们做的就是规范我们的代码,让我们自己变的更强大更好。

 

来源:Android开发编程内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯