android性能优化的一些东西
说到android性能优化,总觉得是一个很模糊的东西,因为app的性能始终适合手机本身的性能挂钩的,也许一些消耗内容的操作,在一些移动设备可以运行,但是在另外一些上面就会出现内存溢出的问题,但是不管怎么说,但问题出现的时候,我们应该有解决的办法,最起码有解决办法的思路,下面就是聊聊android性能一些问题。
首先是三个名称:内存泄漏,内存溢出(OOM),应用程序无响应(ANR)。
我们知道,android手机上运行app其实很多时候(只是很多时候),每个app都运行在一个进程中,这个进程是设备给应用程序分配的,其实你也可以理解为,每个应用程序运行在一个设备为我们分配的虚拟机(dalivk虚拟机)中,这样一来,其实每个程序能够给我们使用的内存是设备分配给我们的。而每个进程中可以并且只有一个线程,这个线程就是主线程(也叫UI线程)。如果我们在这个主线程中做太多的耗时操作,就会引起操作的卡顿这些问题。如果严重的话就会引起应用程序无响应(ANR)。
内存泄漏就是,我们的程序在申请内存后(比如实例化对象),在使用结束后,不能及时释放掉这些内存。一般内存泄漏单次不会有太多问题,但是太多的内存泄漏会导致太多无用的内存占有,这个时候有可能会导致内存溢出(OOM)。
内存溢出分两种情况,第一种,我们为一个对象分配的空间不够本对象使用,比如实例化了一个integer对象,但是放入一个更大的对象。第二个就是虚拟机内存被占满。
那么如何解决这些问题呢,这里只是一些思路:
1、在使用布局的时候,使用简单布局。有两种情况,第一种,劲量不要嵌套太多的无用布局,这样不会在CPU运算时做太多无用的计算,第二个,就是在使用布局的时候,劲量使用简单的viewgrounp,在这里复杂程度的排序:RelativeLayout大于LinearLayout和FrameLayout。
2、在使用布局的时候,多使用<include>、<merge>和ViewStub。一般<include>和<merge>配合使用,这样就不必过多的重复使用一段代码,这样就会不至于CPU重复运行一段布局。ViewStub是在有需求的时候在加载布局,比如一个界面中有一段布局默认是不显示的,但是当我们需要时候的时候需要显示,这个时候假如我们不使用的时候也加载这段代码就是不合适的。这个时候使用ViewStub就好。
3、使用静态变量的时候劲量使用final,或是说劲量少的使用静态变量,我们知道静态变量不会随着调用它的程序结束而消失,这会导致一定程度上的内存泄漏。
4、使用属性动画的时候在Activity结束的时候,要使用animator.cancel()来停止动画,因为有些动画是无限循环的,在调用他的程序都结束的时候,他还会一直循环,这个时候也会造成内存泄漏。
5、在自定义view或viewgrounp的时候,不要在onDraw中做太多的耗时操作,因为这样会导致view的绘制过程不流畅,导致一种卡卡的感觉。
6、不要在onDraw方法中定义局部变量,因为在view绘制的工程中,onDraw方法会多次调用,这样会多次创建局部变量,对内存造成不必要的浪费。
7、对listview等的优化,在自定义Adpter的时候,使用holder,这样可以重复调用已经实例化好的对象,而不会重复实例化对象。同时在getView中不要做耗时操作,这样会使listview等整体加载流畅。
8、劲量少的使用枚举,枚举占用的空间比整形大。
9、少的创建对象,因为创建对象就会对应的创建堆内存和栈内存,基本我们不调用不赋值,也会创建堆内存。
10、劲量多的使用内存缓存和磁盘缓存,如使用LruCache等,这样可以使一些资源重复调用。
11、适当使用软应用和弱应用。
12、使用线程的时候,使用线程池,这样可以避免大量的创建线程和销毁线程的操作。
出现ANR的时候,我们可以使用系统在/data/anr里面产生的日志traces.txt进行分析。使用命令:adb pull /data/anr/traces.txt,就可以打开查看日志了。
内存泄漏的问题,我们可以使用MAT工具进行分析。
关于性能优化,其实有数不尽的需要注意的地方。毕竟永远都没有最优只要更优。也欢迎各位补充。
不是闷骚的程序员算不上程序员。我的微信公众号“那点鼻事”,在这里周一到周五每天一篇文章,与技术无关,只哈牛逼。

android性能优化的一些东西的更多相关文章
- Linux/Android 性能优化工具 perf
/***************************************************************************** * Linux/Android 性能优化工 ...
- [Android 性能优化系列]降低你的界面布局层次结构的一部分
大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地 ...
- Android 性能优化——之控件的优化
Android 性能优化——之控件的优化 前面讲了图像的优化,接下来分享一下控件的性能优化,这里主要是面向自定义View的优化. 1.首先先说一下我们在自定义View中可能会犯的3个错误: 1)Use ...
- Android性能优化系列之apk瘦身
Android性能优化系列之布局优化 Android性能优化系列之内存优化 为什么APK要瘦身.APK越大,在下载安装过程中.他们耗费的流量会越多,安装等待时间也会越长:对于产品本身,意味着下载转化率 ...
- Android性能优化系列之电量优化
电量消耗的计算与统计是一件麻烦而且矛盾的事情,记录电量消耗本身也是一个费电量的事情,随着Android开的性能要求越来越高,电量的优化,也显得格外重要,一个耗电的应用,用户肯定会毫不犹豫的进行卸载,所 ...
- Android性能优化第(一)篇---基本概念
最近打算总结几篇app性能优化方面的东西,毕竟android弄了这么久,万一到哪些转了行,岁月久了就忘记了,纯粹当个人笔记.今个是第一篇---性能优化的基本概念,毛主席说了,让理论先行,理论指导实践. ...
- 【腾讯Bugly干货分享】Android性能优化典范——第6季
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/580d91208d80e49771f0a07c 导语 这里是Android性能优 ...
- android 性能优化
本章介绍android高级开发中,对于性能方面的处理.主要包括电量,视图,内存三个性能方面的知识点. 1.视图性能 (1)Overdraw简介 Overdraw就是过度绘制,是指在一帧的时间内(16. ...
- Android性能优化典范第二季
Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitma ...
随机推荐
- Python 一些常用模块的安装
(1)python PIL(image)模块的安装 sudo apt-get install python-imaging
- vue-cli 官方模板webpack-simple的npm run dev 与npm run bulid的一些问题
npm run dev命令后并不会在dist目录下生成build.js文件,开发环境下build.js是在运行内存中的. 在package.json的scripts属性的dev后面加上--port 8 ...
- xshell安装运行时提示缺少mfc110.dll
下载最新的mfc110.dll文件 https://pan.baidu.com/share/link?shareid=1932421734&uk=1784696518&app=zd 之 ...
- QT第二天学习
回顾: qmake: qmake -project //生成*.pro文件 qmake //makefile make 注:if(qmake -v >=5) then QT += widget ...
- 分布式环境中三种Session管理方法的使用场景及优缺点
在分布式环境,管理Session通常使用下面三种方式: 一.Session Replication 方式管理 (即session复制) 简介:将一台机器上的Session数据广播复制到 ...
- pureMVC简单示例及其原理讲解二(Model层)
本节将讲述Model层. Model层有VO和Mediator组成,非常简单,仅仅包含两个类:UserVO和UserProxy. UserVO中的构造器用于初始化用户的添加(通过email和密码),另 ...
- 关于redis的主从、哨兵、集群
关于redis主从.哨兵.集群的介绍网上很多,这里就不赘述了. 一.主从 通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重 ...
- 故障排查实战案例——某电器ERP系统日志暴增
前言 本篇文章写在新春佳节前夕,也是给IT运维朋友一个警醒,在春节长假前请妥善体检自己的系统安心过个年. 千里之堤毁于蚁穴,一条看似简单的语句就能拖垮整个系统,您的SQL Server很久没体检了吧? ...
- Java连接数据库(mysql,sqlserver)
犹记当年为了使用java程序连接mysql数据库花费一天时间,最后发现是没有导入外包,如今看来真的发现自己那时有点二,也怪我使用的教科书上没有说明这点(强行甩锅,哈哈).今天分享出来,,希望后者不因为 ...
- vs调试时底部输出调试信息“无法查找或打开 PDB 文件”解决办法
用VS调试程序时,有时会在VS底部的"输出"框中提示"无法查找或打开 PDB 文件".这该怎么解决呢? 下面,我们以VS2013为例,来教大家解决办法. 工具/ ...