在Android开发过程中,很多时候往往因为代码的不规范、api使用不恰当、控件的使用场景考虑不全面和用户不恰当的操作等都能引发一系列性能问题的,下面就是我目前整理的一些Android开发过程中需要注意的细节,正所谓一颗老鼠屎可以坏了一锅粥,细节决定成败

下面就是一些性能优化的方案:


1、Android中别使用enum,使用static final 代替枚举enum,因为使用enum比使用static需要消耗更多的内存空间


2、Toast中使用getApplicationContext()来代替当前Activity的Context,如Toast.makeText(getApplicationContext(),"",Toast.LENGTH_SHORT).show();

因为如果使用当前Activity的Context,当用户操作不当时,比如在Toast显示时候按了返回键,而此时Toast又持有当前Activity的Context引用,所以导致内存泄漏


3、Android开发中合理的使用static,因为static的生命和应用的生命一样长,如果该变量可以的话则不要用static修饰,让它和Actiity保持一样的生命周期或者和方法保持一样的生命周期


4、关于网络请求,如果使用的非常频繁则会对用户手机的电量和流量造成比较大的损耗,正所谓应用的开发应把用户体验放在第一位,所以在网络请求方面,应尽量遵循这两个原则:

1、减少移动网络被激活的时间与次数(保证应用功能正常使用的前提下)

2、对一些与用户交互的比较大的数据(图片、文件等),可以对这些数据进行压缩


5、防止内存抖动,所谓内存抖动就是在短时间内创建出大量的对象,从而造成内存紧张,进而触发GC回收,因为执行GC的回收的时候,所有的线程都会暂停,包括主线程,只有等待GC回收完成后其它操作才能继续进行,通常情况下GC回收的效率是非常高效的,但是如果内存上发生大量内存抖动,那么将会导致GC的回收效率降低。所以内存抖动很可能会造成界面卡顿。

防止内存抖动:

1、可以使用对象池来管理对象,减少对象创建的次数,在使用完成之后再手动释放对象池中的对象

2、不要在for、while等循环体中执行对象的创建

3、避免在onDraw()方法中执行对象的创建

4、采用预分配策略来减少一次性创建大量的数据

预分配:就是在程序刚启动的时候就事先创建一些即将要使用到的数据,这样可以在需要使用到这些数据的时候提供更快的加载速度,这种行为就叫做预分配


6、针对自定义View,我们在

  • 我们知道调用View.invalidate()会触发View的重绘,有两个原则需要遵守:

    1、仅仅在View的内容发生改变的时候才去触发invalidate方法

    2、尽量使用ClipRect等方法来提高绘制的性能
  • 减少绘制时不必要的绘制元素,对于那些不可见的元素,我们需要尽量避免重绘
  • 不要在onDraw()方法中执行内存分配的操作,如:不要在onDraw()方法中执行Paint mPaint = new Paint();等操作
  • 对于不在屏幕上的元素,可以使用Canvas.quickReject把他们给剔除,避免浪费CPU资源。另外尽量使用GPU来进行UI的渲染,这样能够极大的提高程序的整体表现性能

Android性能优化典例(一)的更多相关文章

  1. Android性能优化典例(二)

    1.使用 Maven 依赖方案代替使用导入jar包方案 如果项目中需要用到第三方jar包,常用的做法是去网上下载后然后放入libs文件夹,再添加到项目依赖,不过,在Android Studio已经不推 ...

  2. 老李分享:Android性能优化之内存泄漏1

    老李分享:Android性能优化之内存泄漏   前言 对于内存泄漏,我想大家在开发中肯定都遇到过,只不过内存泄漏对我们来说并不是可见的,因为它是在堆中活动,而要想检测程序中是否有内存泄漏的产生,通常我 ...

  3. android 性能优化

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

  4. Android性能优化典范第一季

    2015年伊始,Google发布了关于Android性能优化典范的专题,一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有关 ...

  5. [转]Android性能优化典范

    2015年伊始,Google发布了关于Android性能优化典范的专题,一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有关 ...

  6. [Android Pro] Android性能优化典范第一季

    reference to : http://www.cnblogs.com/hanyonglu/p/4244035.html#undefined 2015年伊始,Google发布了关于Android性 ...

  7. Android性能优化之布局优化

    最新最准确内容建议直接访问原文:Android性能优化之布局优化 本文为Android性能优化的第二篇——布局优化,主要介绍使用抽象布局标签(include, viewstub, merge).去除不 ...

  8. Android优化—— Google 发布 Android 性能优化典范

    阅读目录 0)Render Performance 1)Understanding Overdraw 2)Understanding VSYNC 3)Tool:Profile GPU Renderin ...

  9. Android性能优化典范(转)

    转载自oschina. 2015年伊始,Google发布了关于Android性能优化典范的专题, 一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍 ...

随机推荐

  1. 理解性能的奥秘——应用程序中慢,SSMS中快(5)——案例:如何应对参数嗅探

    本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(4)--收集解决参数嗅探问题的信息 首先我们需要明白,参数嗅探本身不是问 ...

  2. 设置 NSZombieEnabled 定位 EXC_BAD_ACCESS 错误

    我们做 iOS 程序开发时经常用遇到 EXC_BAD_ACCESS 错误导致 Crash,出现这种错误时一般 Xcode 不会给我们太多的信息来定位错误来源,只是在应用 Delegate 上留下像 T ...

  3. bash shell while语法

    在编写脚本时,一定要注意空格 基本语法: while [ condition ] do command1 command2 command3 done condition为true时命令1到命令3将会 ...

  4. 集合框架之List接口

    有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素. 与 set 不同,列表 ...

  5. Effective C++ ——继承与面向对象设计

    条款32:确定你的public继承塑模出is-a关系 以public继承的类,其父类的所有的性质都应该使用与子类,任何需要父类的地方都应该能用子类来代替,任何子类类型的对象也同时是父类的: class ...

  6. Android简易实战教程--第十九话《手把手教您监听EditText文本变化,实现抖动和震动的效果》

    昨晚写博客太仓促,代码结构有问题,早上测试发现没法监听文本变化!今日更改一下.真心见谅啦,哈哈!主活动的代码已经改好了,看截图这次的确实现了文本监听变化情况. 监听文本输入情况,仅仅限于土司略显low ...

  7. 为何不能在viewDidLoad方法中显示其他视图

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 你可以使得当视图控制器(view controller)显示自 ...

  8. 最简单的基于librtmp的示例:接收(RTMP保存为FLV)

    ===================================================== 最简单的基于libRTMP的示例系列文章列表: 最简单的基于librtmp的示例:接收(RT ...

  9. Android开发学习之路--网络编程之xml、json

    一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载 ...

  10. Cocos2Dv3.4在AppDelegate中不返回的情况及解决

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们通常想在app启动的早期做一些事情,可能放在AppDeleg ...