说到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性能优化的一些东西的更多相关文章

  1. Linux/Android 性能优化工具 perf

    /***************************************************************************** * Linux/Android 性能优化工 ...

  2. [Android 性能优化系列]降低你的界面布局层次结构的一部分

    大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地 ...

  3. Android 性能优化——之控件的优化

    Android 性能优化——之控件的优化 前面讲了图像的优化,接下来分享一下控件的性能优化,这里主要是面向自定义View的优化. 1.首先先说一下我们在自定义View中可能会犯的3个错误: 1)Use ...

  4. Android性能优化系列之apk瘦身

    Android性能优化系列之布局优化 Android性能优化系列之内存优化 为什么APK要瘦身.APK越大,在下载安装过程中.他们耗费的流量会越多,安装等待时间也会越长:对于产品本身,意味着下载转化率 ...

  5. Android性能优化系列之电量优化

    电量消耗的计算与统计是一件麻烦而且矛盾的事情,记录电量消耗本身也是一个费电量的事情,随着Android开的性能要求越来越高,电量的优化,也显得格外重要,一个耗电的应用,用户肯定会毫不犹豫的进行卸载,所 ...

  6. Android性能优化第(一)篇---基本概念

    最近打算总结几篇app性能优化方面的东西,毕竟android弄了这么久,万一到哪些转了行,岁月久了就忘记了,纯粹当个人笔记.今个是第一篇---性能优化的基本概念,毛主席说了,让理论先行,理论指导实践. ...

  7. 【腾讯Bugly干货分享】Android性能优化典范——第6季

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/580d91208d80e49771f0a07c 导语 这里是Android性能优 ...

  8. android 性能优化

    本章介绍android高级开发中,对于性能方面的处理.主要包括电量,视图,内存三个性能方面的知识点. 1.视图性能 (1)Overdraw简介 Overdraw就是过度绘制,是指在一帧的时间内(16. ...

  9. Android性能优化典范第二季

      Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitma ...

随机推荐

  1. 14.TCP的坚持定时器和保活定时器

    一.坚持定时器   1.坚持定时器的由来         TCP通过让接收方指明希望从发送方接受的窗口大小来进行流量控制.设置窗口大小为0可以组织发送方传送数据,直至窗口变为非0为止.         ...

  2. loading.io一个可以直接生成loading gif图标的站点

    官网是:http://loading.io/ 进去后,可以拖动左图大小,然后点右边的make gif就可以自动生成所选大小的gif图标了,生成后会弹出一个download窗,点download下载即可 ...

  3. NSBundle介绍

    原文:http://blog.sina.com.cn/s/blog_8c87ba3b0100t89v.html bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译 ...

  4. mysql中游标的使用案例详解(学习笔记)

    1.游标是啥玩意?简单的说:游标(cursor)就是游动的标识,啥意思呢,通俗的这么说,一条sql取出对应n条结果资源的接口/句柄,就是游标,沿着游标可以一次取出一行.我给大家准备一张图: 2.怎么使 ...

  5. Android文件管理,实现全选,删除等操作

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 1.例中数据是读 ...

  6. windows apache 开启 GZIP

    从服务端优化来说,通过对服务端做压缩配置可以大大减小文本文件的体积,从而使加载文本的速度成倍的加快.目前比较通用的压缩方法是启用gzip压缩.它 会把浏览器请求的页面,以及页面中引用的静态资源以压缩包 ...

  7. Java数据库连接--JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  8. 判断div是否有滚动条

    判断div是否有滚动条 var obj=document.getElementById("showDiv"); if(obj.scrollHeight>obj.clientH ...

  9. Firebug及YSlow简介与使用图文详解

    Firebug本是Firefox浏览器下一个出色的网页设计插件,随着浏览器的发展,Firebug也推出了支持IE.Opera.Chrome的Firebug Lite.凭借Firebug的出色代码调试功 ...

  10. tomcat服务器搭建之ngrok——将内网地址映射到外网

    最近心血来潮,想学习微信公众号开发.但是自己又没有外网服务器,这个给我带来很大的麻烦. 刚开始申请了新浪云服务和百度云服务,将写好的代码打包丢到相应的云服务器上就行. 但问题就来了,开发中避免不了错误 ...