Android艺术——性能优化问题

这次分析方向,我们主要包括:布局优化、绘制优化、内存泄漏优化、响应速度优化、ListView优化、Bitmap优化、线程优化。

布局优化:尽量的减少布局的层级,这意味着Android绘制时的工作量会变少。

标签:<include>的使用只支持Android:layout的开头属性

<merge> 可以去除多余的那一层LinearLayout

ViewStub 继承了View,本身不参与任何的布局和绘制过程,其意义在于按需加载所需的布局文件,还不能支持<merge>标签。

绘制优化:指的是View的onDraw方法要避免执行大量的操作;

1)onDraw中不要创建新的布局对象,这是因为onDraw方法可能会被频繁调用,会一瞬间产生大量的临时对象,占用过多的内存导致系统更加频繁gc,降低程序的执行效率。

2)onDraw不要做耗时的任务,过多的循环操作会抢占CPU的时间片,这样造成View的绘制过程不流畅。官方标准View的绘制帧率保证60fps是最佳。我们需要尽量降低onDraw方法的复杂度。

内存泄漏优化:内存泄漏并不会导致程序功能异常,但是会导致Android程序的内存占用过大,会提高内存溢出的发生几率。内存泄漏分析工具MAT。我们需要尽量规避潜在的内存泄漏。会存在场景:1.静态变量导致的内存泄漏;2.单例模式导致的内存泄漏;3.属性动画导致的内存泄漏;具体以后详解

响应速度优化:核心就是避免在主线程中做耗时的操作,采用异步的方式执行耗时操作。如果主线程做太多的耗时事情,会导致Activity启动黑屏现象。会导致出现ANR,出现之后不要着急,通过分析traces文件即可定位。

ListView和Bitmap优化:

ListView的优化无非在于

1)采用ViewHolder并且避免在getView中执行耗时操作;

2)根据列表的滑动状态来控制任务的执行频率;

3)尝试开启硬件加速来是ListView的滑动更加的流畅;

Bitmap优化之前已经说到过了,主要图片的采样,BitmapFactory.Options的inSampleSize参数。

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

其他优化建议:1)避免创建过多的对象;2)不要过多的使用枚举,其占有的内存空间要比整形大;3)常量使用static final来修饰;4)适当使用软引用和弱引用;5)采用内存缓存与磁盘缓存;6)尽量使用静态内部类;7)使用一些Android特有的数据结构。

时间: 2024-10-13 00:54:23

Android艺术——性能优化问题的相关文章

【读书笔记】《Android应用性能优化最佳实践》

<第一行代码>读书笔记 一.引言 二.读书内容 书名:<Android应用性能优化最佳实践> 作者:罗彧成 (腾讯音乐Android开发总监) 出版社:机械工业出版社 封面: 三.书籍评价 四.个人心得 五.参考文档

Android App性能优化(一)之布局优化

当创建复杂布局的时候,我们会在xml 文件中添加大量的ViewGroup和View.伴随着每次迭代,View树的层次越来越深,界面加载速度越来越慢,消耗的内存也越来越多.当您的程序出现加载时短暂黑屏或横竖切换时短暂黑屏,抑或如内存溢出(OOM)之类的问题时,没准您的程序需要优化了. 那么如何让程序运行速度更快?响应更敏捷?优化布局是一个最基本的方法,本文将介绍最基本的优化布局方法. 1.使用ViewStub实现View的延迟加载. 很多情况下,xml布局文件中的部分View初始状态是设置为不显示

Android内存性能优化(内部资料总结)

刚入门的童鞋肯能都会有一个疑问,Java不是有虚拟机了么,内存会自动化管理,我们就不必要手动的释放资源了,反正系统会给我们完成.其实Java中没有指针的概念,但是指针的使用方式依然存在,一味的依赖系统的gc,很容易就造成了内存的浪费.   Java基于垃圾回收的内存机制 Java的内存管理机制会自动回收无用对象所占用的内存,减轻手工管理内存的负担 1.C/C++: 从申请.使用.释放都需要手工管理 2.Java:无用的对象的内存会被自动回收 什么样的对象是无用的对象 1.Java通过引用来操作一

Android开发性能优化总结(一)

安卓开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户. 在实际开发和学习中,我总结了一下关于安卓性能的优化,供大家参考交流. 应用程序的性能问题体现在很多方面, 比如第一次启动速度慢,或者进入某一界面速度慢:动画执行过程不流畅,或者动画执行卡顿时间长:ListView列表滑动过程中卡顿,不流畅:应用程序自定义的某特定界面执行速度慢:响应某一用户事件时长时间无响应(ANR):操作数据库时,执行大量数据的增删改查操作,执行速度

Android客户端性能优化(魅族资深工程师毫无保留奉献)

本文由魅族科技有限公司资深Android开发工程师degao(嵌入式企鹅圈原创团队成员)撰写,是degao在嵌入式企鹅圈发表的第一篇原创文章,毫无保留地总结分享其在领导魅族多个项目开发中的Android客户端性能优化经验,极具实践价值! 即日起,嵌入式企鹅圈将在之前五个专栏(Linux内核驱动情景分析.资源紧缺型SOC嵌入式架构设计.嵌入式交叉工具链及其应用.嵌入式设计和编程.微信硬件平台和物联网解决方案)新增Android开发专栏!更多Android.Linux.嵌入式和物联网原创技术分享敬请

android App性能优化技巧浅谈

Android App性能优化,安卓App性能优化技巧,无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的.那么,如何能开发出更高性能的Android App?相信是软件开发公司以及广大程序员们头疼的一大难题.今天,就给大家提供几个提高Android App性能的技巧. 高效地利用线程1.在后台取消一些线程中的动作 我们知道App运行过程中所有的操作都默认在主线程(UI线程)中进行的,这样App的响应速度就会受

Android应用性能优化

遇到的问题: 1)ANR 2)ListView 卡顿,不流畅 3)Activity启动慢 4)动画不流畅,启动前卡顿 5)自定义view启动慢 6)  OOM 7)数据库大量操作 8)长时间运行后,程序变慢 基本思想: 1)语言层解决问题,语法上提高性能 2)合理的数据结构和算法 3)布局优化,布局深度控制 4)工作线程与UI线程分离 5)合理的缓存机制 6)NDK合理使用 7)优化的SQL语句 8)使用工具,分析问题找出瓶颈 优化工具: view优化工具:hierarchy view 代码优化

Android应用性能优化系列视图篇——隐藏在资源图片中的内存杀手

图片加载性能优化永远是Android领域中一个无法绕过的话题,经过数年的发展,涌现了很多成熟的图片加载开源库,比如Fresco.Picasso.UIL等等,使得图片加载不再是一个头疼的问题,并且大幅降低了OOM发生的概率.然而,在图片加载方面我们是否可以就此放松警惕了呢? 开源图片加载库能为我们解决绝大部分有关图片的问题,然而并不是所有! 首先,图片从来源上可以分成三大类:网络图片.手机图片.APK资源图片.网络图片和手机图片都在图片加载库功能的覆盖范围内,基本上不用开发者太操心,但是APK资源

Android开发性能优化总结(二)

接上一篇<Android开发性能优化总结(一)> 一.安卓UI性能检测与优化 UI是安卓应用程序与用户打交道的最直接途径,UI设计的好不好,直接影响到用户的体验,如果没有达到他们心目中的自然流畅细节,用户要是能够感觉出来,少则影响心情,多则卸载应用:所以一个应用的UI显示性能问题就不得不被开发人员重视. 1.UI卡顿常见原因: 在UI线程中做了耗时操作,导致UI线程卡顿: 布局Layout过于复杂,无法在16ms内完成渲染: 同一时间动画执行的次数过多,导致CPU或GPU负载过重: View过