前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Android性能优化:一份详细的布局优化实战指南,太特么重要了

Android性能优化:一份详细的布局优化实战指南,太特么重要了

原创
作者头像
用户9227784
发布于 2021-12-20 07:41:34
发布于 2021-12-20 07:41:34
92600
代码可运行
举报
运行总次数:0
代码可运行

前言

对于Android开发者来说,懂得基本的应用开发技能往往是不够,因为不管是工作还是面试,都需要开发者懂得大量的性能优化,这对提升应用的体验是非常重要的。对于Android开发来说,性能优化主要围绕如下方面展开:启动优化、渲染优化、内存优化、网络优化、卡顿检测与优化、耗电优化、安装包体积优化、安全问题等。 下面是我整理了网上很多大佬的经验分享对Android性能优化做了一个总结。

Android性能优化的方案比较多,在开发过程中,主要考虑从以下几个方面优化:

  • 布局优化
  • 绘制优化
  • 内存泄漏优化
  • 响应速度优化
  • Listview优化
  • Bitmap优化
  • 线程优化

接下来我们从这几个方面为大家简单介绍优化方案。

布局优化

大家肯定都知道Android中有许多布局,比如Linerlayout、RelativeLayout等,布局优化就是减少布局文件层级,层级减少了,那么程序绘制时就快了许多,所以可以提高性能。

在布局代码中,使用什么布局基本遵守以下规则:

  • 如果布局中既可以使用LinearLayout也可以使用RelativeLayout,那么就采用LinearLayout,这是因为RelativeLayout的功能比较复杂,它的布局过程需要花费更多的CPU时间。
  • 如果布局需要通过嵌套的方式来完成。这种情况下还是建议采用RelativeLayout,因为ViewGroup的嵌套就相当于增加了布局的层级,同样会降低程序的性能。

3.使用<include>或<merge>标签和ViewStub,提取布局中公共部分的布局,可提高布局初始化效率。

绘制优化

绘制优化就是不要再view的onDraw方法中做大量操作。

第一、不要在onDraw方法中创建新的对象,因为onDraw方法可能被频繁调用,这样会产生大量的临时文件,导致内存占用过多,程序执行效率降低。

第二、尽可能的不做耗时的操作,大数量的循环也会占用CPU的时间

内存泄漏优化

内存泄漏优化换句话说,就是什么情况可能会导致内存泄漏,相信大家都比较清楚,因为这也算是初级比较经典的面试题了。主要有以下几种情况:

  • 不要再Acticity中声明静态变量,这样会是的Activity无法完全销毁释放
  • 单例设计模式一起的内存泄漏,单例设计模式的静态特性会使他的生命周期和应用程序的生命周期一样长,这就说明了如果一个对象不在使用了,而这时单例对象还在持有该对象的引用,这时GC就会无法回收该对象,造成了内存泄露的情况。所以使用单例模式时,传入的context应该使用ApplicationContext
  • 非静态内部类创建的静态实例造成的内存泄漏
  • Handler造成的内存泄漏,不要在Activity中用非静态匿名内部类的方式去引用hanlder,比如:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MainActivity extends AppCompatActivity {
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        loadData();
    }
    private void loadData(){
        Message message = Message.obtain();
        mHandler.sendMessage(message);
    }
}

这样hanlder会持有Activity的引用,handler是运行在一个Looper线程中的,而Looper线程是轮询来处理消息队列中的消息的,假设我们处理的消息有10条,而当他执行到第6条的时候,用户退出销毁了当前的Activity,这个时候消息还没有处理完,handler还在持有Activity的引用,这个时候就会导致无法被GC回收,造成了内存泄漏。

响应速度优化

响应速度优化的核心思想是避免在主线程中做耗时操作,Android规定,Activity如果5秒钟之内无法响应屏幕触摸事件或者键盘输入事件就会出现ANR,而BroadcastReceiver如果10秒,Service时20s当然这是小概率事件,如果在相应时间内未得到反映就会出现ANR。当有耗时操作时,可以单独开启一个线程去操作。

listview优化

listview优化相信大家也都比较熟悉了,也是比较经典的面试题,在这里就不详细赘述了,主要有复用view,首先判断view是否为空,如果不为空直接引用,为空再创建使用ViewHolder类,settag的方式保存布局的控件初始化信息,避免每次都去findviewbyid影响效率

Bitmap优化

其实思想也很简单,那就是采用BitmapFactory.Options来加载所需尺寸的图片。这里假设通过ImageView来显示图片,很多时候ImageView并没有图片的原始尺寸那么大,这个时候把整个图片加载进来后再设给imageView,这显然是没必要的,因为ImageView并没有办法显示原始的图片。通过BitmapFactory.Options就可以按一定的采样率来加载缩小后的图片,将缩小后的图片在ImageView中显示,这样就会降低内存占用从而在一定程度上避免OOM,提高了Bitmap加载时的性能。

线程优化

线程优化的思想是采用线程池,避免程序中存在大量的Thread。线程池可以重用内部的线程,从而避免了线程的创建和销毁所带来的性能开销,同时线程池还能有效地控制线程池的最大并发数,避免大量的线程因互相抢占系统资源从而导致阻塞现象的发生。因此在实际开发中,我们要尽量采用线程池,而不是每次都要创建一个Thread对象。

Android性能优化

理论方面

Android的性能优化牵扯的知识点很多,除了上面讲过的这些常用解决方案,底层原理也值得我们深入探讨,此外还有性能监控还有工具的使用。 我根据自己的Android开发经验把这些性能优化的底层原理还有各种问题的解决方案和知识大纲都整理成了资料。希望能帮到你们。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android性能优化方案
大家肯定都知道Android中有许多布局,比如Linerlayout、RelativeLayout等,布局优化就是减少布局文件层级,层级减少了,那么程序绘制时就快了许多,所以可以提高性能。
黄林晴
2019/01/10
7330
第15章-Android性能优化
Android性能优化主要包括布局优化、绘制优化、内存泄露优化、响应速度优化、ListView优化、Bitmap优化、线程优化以及一些优化建议.
程序亦非猿
2019/08/16
3540
Android性能优化:这是一份全面 & 详细的性能优化指南(含内存优化、布局优化等)
前言 在 Android开发中,性能优化策略十分重要 因为其决定了应用程序的开发质量:可用性、流畅性、稳定性等,是提高用户留存率的关键 本文全面讲解性能优化中的所有知识,献上一份 Android性能优化的详细攻略, 含:优化方向、原因 & 具体优化方案,希望你们会喜欢 目录 1. 性能优化的目的 性能优化的目的是为了让应用程序App 更快、更稳定 & 更省。具体介绍如下: 更快:应用程序 运行得更加流畅、不卡顿,能快速响应用户操作 更稳定:应用程序 能 稳定运行 & 解决用户需求,在用户使用过程中不
Carson.Ho
2022/03/25
7.1K0
Android性能优化:这是一份全面 & 详细的性能优化指南(含内存优化、布局优化等)
Android性能优化:这是一份详细的布局优化指南(含标签Include、Viewstub、Merge讲解)
针对 页面布局的性能、层级、测量绘制时间 进行优化,从而提高 Android应用中的页面显示速度
Carson.Ho
2021/12/06
1.9K0
Android性能优化:这是一份详细的布局优化指南(含标签Include、Viewstub、Merge讲解)
Android系统性能优化
快,稳,省,小,这四点很形象的代表了性能的四个方面,同时也让我们知道我们App现在是否是款性能良好的APP,如果有一项不达标,那么说明我们的应用有待优化。
用户9253515
2021/12/22
6180
Android性能优化(二)之布局优化面面观
通过《Android性能优化(一)之启动加速35%》我们获得了闪电般的App启动速度,那么在应用启动完毕之后,UI布局也会对App的性能产生比较大的影响,如果布局写得糟糕,显而易见App的表现不可能流畅。
用户2898788
2018/08/21
9630
Android性能优化(二)之布局优化面面观
Android性能优化相关的10个经典面试题
这些问题和答案可以帮助你准备Android性能优化相关的面试。记得在实际面试中,除了理论知识,也要展示你的实际编码能力和问题解决技巧。
AntDream
2024/09/29
1520
Android性能优化相关的10个经典面试题
Android 性能优化最佳实践
快,稳,省,小,这四点很形象的代表了性能的四个方面,同时也让我们知道我们 App 现在是否是款性能良好的 APP,如果有一项不达标,那么说明我们的应用有待优化。
李林LiLin
2020/11/22
1.4K0
Android性能优化之内存优化
Tips:本篇是《深入探索Android内存优化》的基础篇,如果没有掌握Android内存优化的同学建议系统学习一遍。
做个快乐的码农
2021/11/23
2.7K0
Android性能优化之内存优化
android性能优化
前言 性能优化本身是一个很大的主题,涵盖程序的方方面面,任何不慎的操作,都有可能对性能造成比较大的影响,要知道程序的性能是可以累加的,多处的性能低下,会影响整体的性能,其后果可能也是多方面的,本文总结了目前工作中,所需要知道的大部分性能优化点,一部分个人总结,一部分来自于互联网。但整体上,都是提纲性的,并没有列出具体的实例,因为写这方面主题的达人实在太多了,所以,我得站在巨人的肩膀上,具体细节,请参考对应的链接。 性能低下的现象 游戏:界面很卡,FPS低 搜索性能差 服务器响应速度慢 OS:界面无响应 性能
xiangzhihong
2018/01/29
7910
android性能优化
Art of Android Development Reading Notes 13
《Android开发艺术探索》读书笔记 (13) 第13章 综合技术、第14章 JNI和NDK编程、第15章 Android性能优化
宅男潇涧
2018/08/01
5480
Android 开发艺术探索笔记三
常用的缓存策略:LruCache与DiskLruCache,其中LruCache用作内存缓存,而DiskLruCache用作磁盘缓存。
Yif
2019/12/26
5640
Android性能优化
讲到Android开发,就不得不谈一下Android的优化,不管是平时开发中我们需要注意的一些Android对Java的一些类的优化,还是实际开发中对性能的优化,其实早在15年的google全球大会上google就Android的性能优化就给我们做了很好的介绍:点击打开链接。 接下来本文从几个方面入手讲一讲Android 的优化,主要从以下几点:布局优化,绘制优化,内存优化,响应速度优化,bitmap优化(主要结合listview),线程优化,其他常用性能优化;内存检测工具mat分析与提高。 为了达到优化的
xiangzhihong
2018/02/05
1.1K0
Android性能优化
Android性能优化(六)之卡顿那些事
对普通用户而言,类如内存占用高、耗流量、耗电量等性能问题可能不会轻易发现,但是卡顿问题用户一定会立马直观的感受到。本文就带你一览卡顿的发生、检测、及优化。
用户2898788
2018/08/21
1.2K0
Android性能优化(六)之卡顿那些事
Android优化指南
Android系统中GC内存泄漏的原因 主动回收内存System.gc();、getruntime.runtime.gc 导致内存泄漏主要的原因是,申请了内存空间而忘记了释放。如果程序中存在对无用对象的引用,那么这些对象就会驻留内存,消耗内存,因为无法让垃圾回收器GC验证这些对象是否不再需要。如果存在对象的引用,这个对象就被定义为"有效的活动",同时不会被释放。要确定对象所占内存将被回收,我们就要务必确认该对象不再会被使用。典型的做法就是把对象数据成员设为null或者从集合中移除该对象。但当局部变量不需要时
六月的雨
2018/05/14
1.4K0
5个Android性能优化相关的深度面试题
解答: 内存泄漏是指应用程序中某些对象不再被使用,但仍然被引用,导致垃圾回收器无法回收它们,从而消耗内存。
AntDream
2024/10/23
620
5个Android性能优化相关的深度面试题
这里有一份BAT大厂Android面试超详细知识点,赶快收藏备战金九银十!
金九银十面试季,相信大家肯定急需一套Android面试宝典,今天小编就给大家准备了我珍藏已久的Android高阶面试宝典,一份超级详细的Android面试必备知识点,供大家学习 !
Android技术干货分享
2019/09/20
8180
这里有一份BAT大厂Android面试超详细知识点,赶快收藏备战金九银十!
Carson带你学Android:这是一份全面 & 详细的Activity学习指南
关于内存泄漏 & 性能优化,请看系列文章: Android性能优化:这是一份全面&详细的内存优化指南 Android性能优化:手把手带你全面了解 内存泄露 & 解决方案 Android性能优化:那些关于Bitmap图片资源优化的小事 Android性能优化:手把手带你全面了解 绘制优化 Android性能优化:布局优化 详细解析(含、、讲解 )
Carson.Ho
2022/03/24
5800
Carson带你学Android:这是一份全面 & 详细的Activity学习指南
Android性能优化概述
对于Android的性能优化,想必大家并不陌生,但是没有真正的总结一下,在此我根据自己平时开发,在结合一些读书笔记,对Android的性能优化,进行一些总结。 Android设备作为一种移动设备,不管是内存还是CPU的性能都受到了一定的限制,无法做到像PC设备那样的超大内存和高性能的CPU。 因此,这也意味着,Android不能无限制的使用内存和CPU资源,过多的使用内存会导致程序内存溢出,即OOM。而过多的使用CPU资源,一般是指大量的耗时任务,会导致手机变得卡顿甚至无法响应的情况,即ANR。性能优化的主要是包括布局优化、绘制优化、内存泄露优化、响应速度优化、Bitmap优化、线程优化。 性能优化中一个很重要的问题就是内存泄露,内存泄露并不会导致程序功能异常,但是它会导致Android程序的内存占用过大,这将提高内存溢出的发生几率。在设计程序的时候,还有一个问题也是不可忽略的,那就是代码的可维护性和可扩展性。如果一个程序的可维护性和可扩展性很差,那就意味着后续的代码维护代价是相当高的。
Demo_Yang
2018/10/15
5300
Android性能优化(一)
一个应用App的启动速度能够影响用户的首次体验,启动速度较慢(感官上)的应用可能导致用户再次开启App的意图下降,或者卸载放弃该应用程序。
xiangzhihong
2021/01/22
2.7K0
相关推荐
Android性能优化方案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验