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工具进行分析。

  关于性能优化,其实有数不尽的需要注意的地方。毕竟永远都没有最优只要更优。也欢迎各位补充。

时间: 2024-12-17 12:07:37

android性能优化的一些东西的相关文章

Android 性能优化 三 布局优化ViewStub标签的使用

小黑与小白的故事,通过虚拟这两个人物进行一问一答的形式来共同学习ViewStub的使用 小白:Hi,小黑,ViewStub是什么?听说可以用来进行布局优化. 小黑:ViewStub 是一个隐藏的,不占用内存空间的视图对象,它可以在运行时延迟加载布局资源文件.(更多详细的API等信息可以查看官方文档ViewStub),计算机行业一向是实践里面出真知,下面用一个例子演示下效果. 小黑:说说概念只是为了概括性的了解下,还是用个实例来演示下.先来创建一个Activity中使用的布局文件,文件名是:act

Android性能优化的一些理解

前言 Android性能优化对Android程序的维护和拓展是有很大帮助的,我们知道Android手机不管是内存还是CPU都无法同PC相比,这也就意味着我们必须要谨慎的去使用内存和CPU资源.因为稍稍不注意可能就会引发诸如OOM.ANR.内存泄漏等问题,所以熟悉Android性能优化的几个方法可以有效地提高应用程序的性能,我们可能都能说出一些性能优化的方法,比如布局优化.绘制优化.线程优化等等,但是可能我们会忽视某些小细节,比如布局优化我们可能都知道可以使用< include >来减少布局的层

Android性能优化方法(八)

Android SDK tools目录下提供一个观察布局的工具,层级观察器(Hierarchy Viewer).Hierarchy Viewer工具是一个非常好的布局优化工具,同时,你也可以通过它学习他人的布局.应该说是一个非常实用的工具. AD:WOT2014:用户标签系统与用户数据化运营培训专场 层级观察器(Hierarchy Viewer): Android SDK tools目录下提供一个观察布局的工具,层级观察器(Hierarchy Viewer).Hierarchy Viewer工具

Android性能优化系列之apk瘦身

Android性能优化系列之布局优化 Android性能优化系列之内存优化 为什么APK要瘦身.APK越大,在下载安装过程中,他们耗费的流量会越多,安装等待时间也会越长:对于产品本身,意味着下载转化率会越低(因为竞品中,用户有更多机会选择那个体验最好,功能最多,性能最好,包最小的),所以apk的瘦身优化也很重要,本篇博客将讲述apk瘦身的相关内容. 包体分析 在Android Studio工具栏里,打开build–>Analyze APK, 选择要分析的APK包 可以看到占用空间的主要是代码.图

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

Android 性能优化——之控件的优化 前面讲了图像的优化,接下来分享一下控件的性能优化,这里主要是面向自定义View的优化. 1.首先先说一下我们在自定义View中可能会犯的3个错误: 1)Useless calls to onDraw():我们知道调用View.invalidate()会触发View的重绘,有两个原则需要遵守,第1个是仅仅在View的内容发生改变的时候才去触发invalidate方法, 第2个是尽量使用ClipRect等方法来提高绘制的性能. 2)Useless pixel

Android性能优化方法(九)

通常我们写程序,都是在项目计划的压力下完成的,此时完成的代码可以完成具体业务逻辑,但是性能不一定是最优化的.一般来说,优秀的程序员在写完代码之后都会不断的对代码进行重构.重构的好处有很多,其中一点,就是对代码进行优化,提高软件的性能.下面我们就从几个方面来了解Android开发过程中的代码优化. 1)静态变量引起内存泄露 在代码优化的过程中,我们需要对代码中的静态变量特别留意.静态变量是类相关的变量,它的生命周期是从这个类被声明,到这个类彻底被垃圾回收器回收才会被销毁.所以,一般情况下,静态变量

[Android 性能优化系列]内存之终极篇--降低你的内存消耗

大家如果喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地址:http://developer.android.com/training/articles/memory.html 在接下来的一段时间里,我会每天翻译一部分关于性能提升的Android官方文档给大家 建议大家在看本文之前先去我的博客看看 [Android 性能优化系列]内存之基础篇--Andr

[Android 性能优化系列]布局篇之减少你的界面层级

大家如果喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地址:http://developer.android.com/training/improving-layouts/optimizing-layout.html 在接下来的一段时间里,我会每天翻译一部分关于性能提升的Android官方文档给大家 性能优化之布局篇: [Android 性能优化系列]布

Android性能优化Google课程翻译

Context: 我自己写下Google关于Android性能优化的视频课程的翻译,希望转载者不要删除我的博客地址http://blog.csdn.net/zhjali123 术语: 1.texture.meshes.举个例子,做一个飞机模型,你要先雕刻出立体的飞机模型(mesh),但是模型还没有上色,这是你要用张纸把它包起来,在上面画迷彩,这层有迷彩的纸就是(texture,中文叫纹理). Lesson1:Render(渲染) 1.Android设备通常16ms 更新下Activity,具体取