前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android性能优化概述

Android性能优化概述

作者头像
Demo_Yang
发布2018-10-15 16:28:07
4960
发布2018-10-15 16:28:07
举报
文章被收录于专栏:yang0rangeyang0range

对于Android的性能优化,想必大家并不陌生,但是没有真正的总结一下,在此我根据自己平时开发,在结合一些读书笔记,对Android的性能优化,进行一些总结。 Android设备作为一种移动设备,不管是内存还是CPU的性能都受到了一定的限制,无法做到像PC设备那样的超大内存和高性能的CPU。 因此,这也意味着,Android不能无限制的使用内存和CPU资源,过多的使用内存会导致程序内存溢出,即OOM。而过多的使用CPU资源,一般是指大量的耗时任务,会导致手机变得卡顿甚至无法响应的情况,即ANR。性能优化的主要是包括布局优化、绘制优化、内存泄露优化、响应速度优化、Bitmap优化、线程优化。 性能优化中一个很重要的问题就是内存泄露,内存泄露并不会导致程序功能异常,但是它会导致Android程序的内存占用过大,这将提高内存溢出的发生几率。在设计程序的时候,还有一个问题也是不可忽略的,那就是代码的可维护性和可扩展性。如果一个程序的可维护性和可扩展性很差,那就意味着后续的代码维护代价是相当高的。

布局优化

优化布局就是尽量减少布局文件的层级,布局中的层级减少了,这就意味着Android绘制时的工作量减少了。 首先删除布局中的无用的控件和层级,其次有选择地使用性能较低的ViewGroup。如果布局中既可以使用LinearLayout也可以使用RelativeLayout,那么采用LinearLayout,这是因为RelativeLayout的功能比较复杂,它的布局过程需要花费更多的CPU时间。

采用标签

<include>标签

这个标签用于布局的重用,可以将一个指定的布局文件加载到当前的布局文件

<merge>标签

由于当前布局是一个竖直方向的LinearLayout,这个时候如果被包含的布局文件中也是采用了竖直方向的LinearLayout,那么被包含的布局文件当中的LinearLayout是多余的,通过<merge>标签就可以去掉多余的那一次LinearLayout。

ViewStub

ViewStub继承了View,它非常轻量级且宽高都是0,因此它本身不参与任何的布局和绘制过程。ViewStub的意义在于按需加载所需的布局文件,这样就是没有必要在整个界面初始化的时候将其加载进来,通过ViewStub就可以做到在使用的时候再加载。

绘制优化

内存泄露优化

内存泄露优化有两个方面,一方面是在开发过程中避免写出有内存泄露的代码,另一方面是通过一些分析工具找出潜在的内存泄露。

场景1:静态变量导致的内存泄露
场景2:单例模式导致的内存泄露

泄露的原因是Activity的对象被单例模式所持有,而单列模式的特点是其生命周期和Application保持一致,因此Activity对象无法被及时释放。

场景3:属性动画导致的内存泄露

属性动画有一类是无限循环的动画,如果在Activity中播放此类动画且没有在onDestory中去停止动画,那么动画会一直播放下去,尽管已经无法在界面上看到动画效果了,并且这个时候Activity的View会被动画持有,而View又持有了Activity,最终Activity无法释放。解决方法是在Activity的onDestory中调用animator.cancel()来停止动画。

Bitmap优化

主要是通过BitmapFactory.Options来根据需要对图片进行采样。

性能优化建议

避免创建过多的对象
不要过多使用枚举,枚举占用的内存空间要比整型大
常量请使用static final来修饰
适当会用软引用和弱引用
采用内存缓存和磁盘缓存
尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄露
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.08.22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 布局优化
        • <merge>标签
        • ViewStub
        • 内存泄露优化
        • 场景1:静态变量导致的内存泄露
        • 场景2:单例模式导致的内存泄露
        • 场景3:属性动画导致的内存泄露
        • 避免创建过多的对象
        • 不要过多使用枚举,枚举占用的内存空间要比整型大
        • 常量请使用static final来修饰
        • 适当会用软引用和弱引用
        • 采用内存缓存和磁盘缓存
        • 尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄露
    • 绘制优化
    • Bitmap优化
    • 性能优化建议
    相关产品与服务
    云直播
    云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档