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特有的数据结构。
Android艺术——性能优化问题的更多相关文章
- Android应用性能优化(转)
人类大脑与眼睛对一个画面的连贯性感知其实是有一个界限的,譬如我们看电影会觉得画面很自然连贯(帧率为24fps),用手机当然也需要感知屏幕操作的连贯性(尤其是动画过度),所以Android索性就把达到这 ...
- Android客户端性能优化(魅族资深工程师毫无保留奉献)
本文由魅族科技有限公司资深Android开发工程师degao(嵌入式企鹅圈原创团队成员)撰写,是degao在嵌入式企鹅圈发表的第一篇原创文章,毫无保留地总结分享其在领导魅族多个项目开发中的Androi ...
- Android APP 性能优化的一些思考
说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...
- 包建强的培训课程(9):Android App性能优化
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- Android app 性能优化的思考--性能卡顿不好的原因在哪?
说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...
- android app性能优化大汇总
这里根据网络上各位大神已经总结的知识内容做一个大汇总,作为记录,方便后续“温故知新”. 性能指标: (1)使用流畅度: 图片处理器每秒刷新的帧数(FPS),可用来指示页面是否平滑的渲染.高的帧率可以 ...
- Android开发性能优化总结(一)
安卓开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户. 在实际开发和学习中,我总结了一下关于安卓性能的优化,供大家参考交流. ...
- Android应用性能优化系列视图篇——隐藏在资源图片中的内存杀手
图片加载性能优化永远是Android领域中一个无法绕过的话题,经过数年的发展,涌现了很多成熟的图片加载开源库,比如Fresco.Picasso.UIL等等,使得图片加载不再是一个头疼的问题,并且大幅降 ...
- (转) Android开发性能优化简介
作者:贺小令 随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序.以上理由,足以 ...
随机推荐
- 探索js原型链和vue构造函数中的奥妙
这篇文章首先会讲到原型链以及原型链的一些概念,然后会通过分析vue的源码,来看一下vue的构造函数是如何被创建的,now we go! 一.什么是原型链? 简单回顾下构造函数,原型和实例的关系: ...
- 多元线性回归公式推导及R语言实现
多元线性回归 多元线性回归模型 实际中有很多问题是一个因变量与多个自变量成线性相关,我们可以用一个多元线性回归方程来表示. 为了方便计算,我们将上式写成矩阵形式: Y = XW 假设自变量维度为N W ...
- 如何利用HTTP缓存来加快你的网站应用
缓存在web环境各个环节都有实现,有CPU缓存.文件缓存.程序的Opcode缓存(APC,eAccelerator).内存缓存(Memcached,Redis).代理服务器(Nginx,Squid). ...
- SQL优化 MySQL版 - 单表优化及细节详讲
单表优化及细节详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:本文章需要MySQL数据库优化基础或观看前几篇文章,传送门: B树索引详讲(初识SQL优化,认识索引):htt ...
- SLAM+语音机器人DIY系列:(四)差分底盘设计——4.底盘ROS驱动开发
摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...
- Node.js - 阿里Egg的多进程模型和进程间通讯
前言 最近用Egg作为底层框架开发项目,好奇其多进程模型的管理实现,于是学习了解了一些东西,顺便记录下来.文章如有错误, 请轻喷 为什么需要多进程 伴随科技的发展, 现在的服务器基本上都是多核cpu的 ...
- Revit通过API创建共享参数
Revit共享参数是通过创建一个.txt类型的文件来保存相关信息,一旦与项目保存完毕之后,共享参数也就变成了项目参数(项目参数无法通过API创建),项目参数是保存在Revit项目里面的,所以此时这个. ...
- 根据点击事件去选取电脑中.rvt文件
private void button_Click(object sender, RoutedEventArgs e) { //这个选出来是文件夹 //选择文件 var openFileDialog ...
- C#中try catch finally 用法
1.将预见可能引发异常的代码包含在try语句块中. 2.如果发生了异常,则转入catch的执行. catch有几种写法: catch 这将捕获任何发生的异常. catch(Exception e) ...
- 阿里云服务器,Sql Server 本地连接服务器端问题记录
1.如果你是阿里云服务器,配置参数都整好了并且排除了防火墙问题(关闭了防火墙),依然没有连接上,那就先考虑这个问题 问题:阿里云服务器的SQLServer不允许远程连接 原因:因为除了服务器上的防火墙 ...