Android性能优化的5种方案

Android性能优化的5种方案量化性能的指标有很多 但最重要的就是以下 5 种 优化性能就是可以从以上 5 点入手 顾名思义就是减少 apk 包体积大小 apk 大小主要取决于 res 下的资源文件 class 文件 具体优化措施有 对用户来说 响应时间自然越短越好 响应时间越短 操作也就越顺畅 响应速度包括启动速度 点击 APP 按钮到 APP 首页完全打开的过程尽可能快 页面响应速度 用户执行点击 滑动等操作后 页面能快速响应 APP 不能产生卡顿 更不能出现 ANR 具体优化措施有 减少内存的使用 主要是避免创建过多对象占用过多内存 避免内存抖动以及避免内

Android性能优化的5种方案

指标

量化性能的指标有很多,但最重要的就是以下5种:

  • 包大小
  • 响应时间
  • 内存
  • CPU
  • 耗电量

优化性能就是可以从以上5点入手。

包大小优化

顾名思义就是减少apk包体积大小,apk大小主要取决于res下的资源文件、.class文件,具体优化措施有:

  • 压缩图片大小,再在项目中使用。
  • 在AndroidStudio内,可以将png等格式的图片压缩为.webp格式,这可以进一步减少图片大小。
  • 尽可能地减少本地资源的使用,可从技术方案上考虑从服务端拉取图片、lottie、so库等资源。
  • 利用lottie替换帧动画的使用,减少帧动画图片资源的使用。
  • 利用混淆删除无用代码,减少dex文件大小。

响应时间优化

对用户来说,响应时间自然越短越好。响应时间越短,操作也就越顺畅。

响应速度包括启动速度——点击APP按钮到APP首页完全打开的过程尽可能快、页面响应速度——用户执行点击、滑动等操作后,页面能快速响应。APP不能产生卡顿、更不能出现ANR。

具体优化措施有:

  • 耗时操作应放入子线程进行处理,不能阻塞主线程。
  • SDK等资源应采用懒加载方式,需要时才进行加载,不需要时可不必加载。
  • 线上环境避免打印大量的日志。
  • 使用BitmapFactory.Option的inBitmap变量,来复用旧的Bitmap,避免为Bitmap多次分配内存以及销毁旧Bitmap(如果该Bitmap使用频率高的话)
  • 优化view视图渲染时间:
  • recyclerview列表控件优化:

Android性能优化的5种方案

内存优化

内存泄漏即应该被GC回收的内存,由于还在被其他对象引用,导致无法被回收。内存泄漏是比较严重的问题,过多的内存泄漏会导致内存溢出,产生OOM的系统错误。

造成内存泄漏的原因主要有:

  • 单例类引用Context造成内存泄漏。
  • 非静态内部类引用外部类造成内存泄漏。
  • handler引用activity造成内存泄漏。
  • 属性动画没有取消,导致view一直被引用造成内存泄漏。
  • 监听器没有取消、回调没有反注册。

内存优化的措施有:

  • 使用线程池复用线程,因为线程本身会占用相对比较大的内存,复用就可以省下部分内存。
  • 在onDraw方法内避免创建对象。因为onDraw会被频繁调用,导致其内部的对象也会被频繁创建,占用过多内存。
  • 尽量使用StringBuilder或StringBuffer拼接字符串,减少String的使用。(因为拼接字符串时,String会创建新的对象,而StringBuilder、StringBuffer是在原字符串基础上拼接)
  • 视图资源不可见时进行清除,避免占用内存。如Bitmap执行.recycle方法进行清除、对图片和lottie资源进行销毁。
  • 针对内存泄漏的问题进行优化:
static class SafeHandler extends Handler { WeakReference 
  
    activity; public SafeHandler(MainActivity mainActivity) { activity = new WeakReference 
   
     (mainActivity); } @Override public void handleMessage(Message msg) { } } 
    
  

④属性动画、监听器使用结束应及时取消,广播或其他一些外部库的回调应该及时反注册。

CPU优化

CPU的作用是计算处理信息、运行程序,因此优化的方向就是减少CPU计算的工作,提升CPU的计算效率。

具体的优化措施有:

  • 避免主线程执行耗时任务,耗时任务在子线程异步执行。
  • 避免在onDraw方法里执行大量耗时操作。
  • 暂时不需要用到的信息进行懒加载、延迟初始化。

耗电量优化

优化的措施有:

  • 避免频繁进行网络请求。
  • 避免任务被频繁执行,可以等任务形成一定数量时,再一起执行。
  • 避免应用频繁唤醒屏幕。(频繁唤醒屏幕会导致系统无法进入休眠,耗电量大)

保证性能指标不下降一直是开发过程中的重中之重,如果由于开发新功能导致出现卡顿、机身发热耗电量猛增、内存增大等性能问题,那样反而会流失用户,得不偿失。因此关注性能也是RD们的一项隐形工作。希望这篇文章能对大家有所帮助。

最后

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

一、架构师筑基必备技能

在这里插入图片描述

二、Android百大框架源码解析

在这里插入图片描述

三、Android性能优化实战解析

  • 腾讯Bugly:对字符串匹配算法的一点理解
  • 爱奇艺:安卓APP崩溃捕获方案——xCrash
  • 字节跳动:深入理解Gradle框架之一:Plugin, Extension, buildSrc
  • 百度APP技术:Android H5首屏优化实践
  • 支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」
  • 携程:从智行 Android 项目看组件化架构实践
  • 网易新闻构建优化:如何让你的构建速度“势如闪电”?

在这里插入图片描述

四、高级kotlin强化实战

  • 从一个膜拜大神的 Demo 开始
  • Kotlin 写 Gradle 脚本是一种什么体验?
  • Kotlin 编程的三重境界
  • Kotlin 高阶函数
  • Kotlin 泛型
  • Kotlin 扩展
  • Kotlin 委托
  • 协程“不为人知”的调试技巧
  • 图解协程:suspend

在这里插入图片描述

五、Android高级UI开源框架进阶解密

六、NDK模块开发

在这里插入图片描述

七、Flutter技术进阶

八、微信小程序开发

在这里插入图片描述

全套视频资料:

一、面试合集
在这里插入图片描述
二、源码解析合集




在这里插入图片描述
三、开源框架合集

在这里插入图片描述
欢迎大家一键三连支持,若需要文中资料,直接点击文末CSDN官方认证微信卡片免费领取【保证100%免费】↓↓↓

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227061.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午10:02
下一篇 2026年3月16日 下午10:02


相关推荐

  • ci框架基础详解(入门学习)

    ci框架基础详解(入门学习)1 ci 框架介绍 CodeIgniter 是为 PHP 开发人员提供的一套 Web 应用程序工具包 它的目标是能够让你比从零开始更加快速的完成项目 它提供了一套丰富的的类库来满足我们日常的任务需求 并且提供了一个简单的接口和逻辑结构来调用这些库 CodeIgniter 通过最小化你需要的代码量 让你把更多的精力放到项目的创造性开发上 CodeIgniter 通过 MIT 开源许可协议授权 你可

    2026年3月20日
    2
  • Vue3—父子组件传值(子组件使用 emit 传值到父组件)

    Vue3—父子组件传值(子组件使用 emit 传值到父组件)Vue3中,子组件通过setup函数中的第一个参数值props拿到定义的组件参数进行使用。如果要向父组件传参,需要使用setup函数中的第二个参数值context(组件上下文)中的emit。例1:Tab菜单子组件创建子组件Tabs.vue<template><divclass=”Tabs”><divv-for=”(menu,index)inlistMenu”:key=”index”…

    2022年5月17日
    135
  • HandlerSocket简介及安装及卸载

    HandlerSocket简介及安装及卸载HandlerSocket是日本人akirahiguchi写的一个MySql的插件。通过这个插件,你可以直接跟MySQL后端的存储引擎做key-value式的交互,省去了MySQL上层的SQL解释、打开关闭表、创建查询计划等CPU开销。按照作者给出的数据可以在数据全部在内存的情况下可以达到75W的QPS查询。总之,它对mysql数据库的操作比mysql本身的操作语句快很多。  适用场景

    2022年8月24日
    10
  • C++ seekg()函数「建议收藏」

    C++ seekg()函数「建议收藏」seekg()是对输入流的操作seekp()是对输出流的操作seekg()Movesthereadpositioninastream.//移动在流中读的位置————————————————————————basic_istream<Elem,Tr>&seek…

    2022年4月28日
    78
  • 数学—-三角形余弦定理证明

    数学—-三角形余弦定理证明参考资料 余弦定理多种证明方法

    2026年3月19日
    2
  • 【 Linux学习】SSH连接时出现Host key verification failed的原因及解决方法以及ssh-keygen命令的用法

    【 Linux学习】SSH连接时出现Host key verification failed的原因及解决方法以及ssh-keygen命令的用法一、问题描述今天下午使用ssh连接其他服务器进行scp操作的时候,提示失败,如下所示:[root@localhostbackups]#scproot@172.xxx.xxx.xxx:/data/gitlabData/backups/1539717714_2018_10_17_9.4.3_gitlab_backup.tar.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@……

    2022年10月21日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号