Android性能优化之内存优化

6人阅读 评论(0) 收藏 举报
分类:

需要知道的一些

  1. Android内存管理是paging分页和memory-mapping内存映射技术(通过映射将二级存储的相关文件关联),没有使用虚拟内存技术,可用内存数量完全取决于RAM。
  2. ART相对于Dalvik,减少了垃圾回收的步骤,为位图对象Bitmap添加了一个特殊的内存块。
  3. ART虚拟机的AOT提前编译在Android N时候添加了JIT及时编译,用于在应用程序执行期间,它仅仅是用于补充AOT的功能。
  4. 内存抖动一般发生在短时间内大量创建新对象和GC对象。

优化

  1. 数据类型的选用,按需求控制基本类型的使用,减少内存和CPU计算
byte:8bit
char:16bit
float:32bit
double:64bit
short:16bit
int:32bit
long:64bit
  1. 避免使用包装类型,以减少自动装箱。比如Integer类和int类型
  2. 1000个以内数据时,用Android优化过的的SparseArray代替平时使用的HashMap

    • SparseArray避免了key和value的自动装箱,它使用的内存区域是连续的(比如HashMap可能10个桶,只有6个桶存了数据),减少内存浪费。
    • SparseArray由2个数组组成,假如容量数量太大,二分查找将会不及hash查找快速
  3. 优先使用ArrayMap代替HashMap,它是SparseArray和HashMap的折中方案,可以使用对象作为Map的key。

  4. 优化循坏,正常情况下,增强型for循坏>for循坏>While循坏>Iterator循坏,循坏时候的length注意,不要每次循坏都计算数组或者别的什么数据结构的长度,应该单独抽取计算。
  5. 避免使用枚举,用静态常量或者注解来代替
  6. 静态常量static和static final是两回事,推荐使用static final,以充分节约内存。JVM优化情况是static final类型的会存在与DEX文件中而不是被初始化在内存中(以空间换时间)。减少内存使用。
  7. 尽量减少创建临时对象,因为他们会频繁触发GC。
  8. 字符串使用StringBuilder来拼接。不要用String str = "ab"; str += "bc"这种方式。
  9. 重复使用的对象应该设置为全局对象。假设它是方法内部的对象,每次执行每次分配内存,直到垃圾收集器到达回收上限才会被回收。
  10. 输入流(标记为is)输出流(标记为os)释放的时候,要分别独立在各自的try catch语句中关闭。以避免由于is假如抛出异常时,os不能正常关闭。
  11. 使用对象池重用对象,借鉴线程池的手段。
  12. Activity的Context慎用,优化方法一般是使用Application的Context。
  13. 避免在Activity中使用静态常量
  14. 使用弱引用和静态内部类来处理Activity中使用耗时任务的情况(比如定时任务的AsyncTask)
  15. 同上, 弱引用来持有一个线程/定时的Handler
  16. 使用IntentService来代替Service,因为它能自动停止。
  17. 使用HandlerThread或者线程池来启动线程,HandlerThread通过Looper能通过消息来多次重复使用该线程减少开支。
  18. 使用四大组件和Fragment,Application实现的 ComponentCallback2接口的onTrimMemory()方法在监听到内存的各种临界值时,需要处理的逻辑,比如清楚缓存,释放堆对象等。(当然还有ComponentCallback接口的onLowMemory方法,但是onTrimMemory()提供了更多的参数,推荐使用)
  19. 不要在menifest文件中添加LargeHeap属性来提高堆空间,太大会影响垃圾回收的时间。会使UI延迟卡顿。

END

查看评论

Android 性能优化 内存优化 How to do

前言在前两篇对Android如何管理内存有一定的了解下,所以本篇文章就是如何进行内存优化。因为Android给每个应用分配的内存是有限的,所以要保证应用占用的内存最小,这样提高让进程长时间存活的概率,...
  • u014099894
  • u014099894
  • 2016-11-21 23:44:12
  • 725

Android性能优化系列之内存优化

在Java中,内存的分配是由程序完成的,而内存的释放是由垃圾收集器(Garbage Collection,GC)完成的,程序员不需要通过调用函数来释放内存,但也随之带来了内存泄漏的可能,上篇博客,我介...
  • u012124438
  • u012124438
  • 2017-01-21 21:00:45
  • 7896

【Android 性能优化】—— 详解内存优化的来龙去脉

APP内存的使用,是评价一款应用性能高低的一个重要指标。虽然现在智能手机的内存越来越大,但是一个好的应用应该将效率发挥到极致,精益求精。本文是【Android 性能优化】系列的第二篇文章,我们在第一篇...
  • qq_23191031
  • qq_23191031
  • 2017-03-19 16:43:06
  • 3765

Android 性能优化之内存优化

Android 性能优化之内存优化 Android 应用程序在开发的过程中内存的准确控制是判断一个程序好坏的重要标准之一: 一、假如我们开发的程序内存溢出、泄漏了会引发那些实质性的问题呢?    1、...
  • xgangzai
  • xgangzai
  • 2016-12-18 20:33:11
  • 15300

Android 性能优化、内存优化

性能调试及定位 主要使用Traceview、monkey、monkey runner调试,traceview类似java web调优的visualvm Traceview是android平台配备的一...
  • wletv
  • wletv
  • 2014-01-20 11:10:46
  • 12272

Android性能优化:这是一份全面&详细的内存优化指南

前言 在 Android开发中,性能优化策略十分重要 本文主要讲解性能优化中的内存优化,希望你们会喜欢 目录 1. 定义 优化处理 应用程序的内存使用、空间占用 ...
  • carson_ho
  • carson_ho
  • 2018-03-14 08:45:09
  • 3660

Android之——性能与内存优化

写出高效代码的两条基本的原则:(1)不要做不必要的事;(2)不要分配不必要的内存。 1. 内存优化       Android系统对每个软件所能使用的RAM空间进行了限制(如:Nexus one 对...
  • l1028386804
  • l1028386804
  • 2015-07-21 17:29:55
  • 3439

Android性能优化之常见内存泄漏和优化方案

本文转载自http://www.jianshu.com/p/ab4a7e353076 感谢原作者xiaoyanger 如果一个无用对象(不需要再使用的对象)仍然被其他对象持有引用,造成该对...
  • zlgzh
  • zlgzh
  • 2017-04-14 13:38:00
  • 2228

Android 性能优化之内存泄漏检测以及内存优化(上)

在Java中,内存的分配是由程序完成的,而内存的释放是由垃圾收集器(Garbage Collection,GC)完成的,程序员不需要通过调用函数来释放内存,但也随之带来了内存泄漏的可能...
  • zhao_zepeng
  • zhao_zepeng
  • 2017-04-10 20:49:13
  • 4763

关于Android面试中如何应对内存优化

很多Android的小伙伴们在面试中都会被面试官问到如何处理内存优化,那么应该如何答复面试官呢,本文就来讲讲如何来介绍Android中遇到的内存优化,让你轻松笑对面试。 大家先看下面的我总结的思维导...
  • lighthouse666
  • lighthouse666
  • 2017-04-18 17:23:57
  • 1151
    个人资料
    等级:
    访问量: 265
    积分: 216
    排名: 34万+
    文章存档
    最新评论