Performance——manage app's memory

原创 2013年12月03日 22:08:12

RAM:

虽然虚拟机可以帮你做垃圾回收,但是程序员最好还是要做到以下几点:

1,避免memory leak,通常是因为使用一些全局性质的变量引用了某个Object。

2,在合适的地方主动释放Object的引用,当然有些变量如块作用域中的局部变量GC可以直接帮你回收。

因为android不提供内存的swap space,所以释放内存的唯一途径就是把Object的引用置为null,

唯一的例外是mapping到内存中的文件,如果这个文件没有被修改,那么在系统需要内存的时候会把它移出内存。


另外基于android的机制,程序员最好也做到以下几点:

1,只有在必要的时候才让service运行,如果service的事情做完了要及时stop这个service。

2,在app进入后台后回收资源

实现onTrimMemory()方法,当内存紧张的时候会叫到这个callback来通知app,这个方法有很多级别,

例如当你的app所有的可视组件都进入后台后framework会叫到这个callback,这个时候的级别是TRIM_MEMORY_UI_HIDDEN。

这个和onStop的区别是onStop针对一个activity,而onTrimMemory针对的是整个app process。

这个callback有很多级别,在使用的时候不要使用==,而要使用>=。例如不要==TRIM_MEMORY_UI_HIDDEN,而要使用>=TRIM_MEMORY_UI_HIDDEN,表示内存的紧张情况高于这个级别了。

在老版本上没有这个callback,要使用onLowMemory,这个等同于onTrimMemory的最高级别TRIM_MEMORY_COMPLETE

3,提前检查你有多少可用的对内存。

android限制了每个app可用堆内存的大小,这个值在不同的设备上是不一样的,可以通过ActivityManager的getMemoryClass()获得,返回值是内存大小,单位M。

如果你特别需要更大的对内存,那就设置<application>的largeHeap="true",这时可以通过getLargeMemoryClass()获得内存数目。

(注意,设置了这个属性后内存也未必比普通的大,取决于设备)

4,load bitmap时选择合适的大小

5,用framework提供的SparseArray代替HashMap,用法和HashMap类似

6,不要随意使用external lib,因为这些lib最初大多不是for移动设备的,请使用针对移动设备做过优化的lib

7,在apk上运行zipalign,这样也可以让apk使用更少的RAM(不运行这个也不能提交到Google Play)

8,学习和java语言相关的节省内存的方法,例如:

enum比静态常量占用更多的内存(2倍)

定义一个class需要500字节

实例化一个对象需要额外的12--16字节

抽象方法,抽象类更耗费内存












android app的内存分两部分,一部分是共享内存,另一部分是虚拟机分配给app的,这部分有大小的限制。

每个app process都是从Zygote fork出来的。


iOS 应用内付费(IAP)开发步骤

参考文章链接: (1)http://mobile.51cto.com/iphone-389249.htm (2)http://blog.csdn.net/xiaominghimi/article/...
  • xiaoxiangzhu660810
  • xiaoxiangzhu660810
  • 2013年12月20日 09:05
  • 53678

AppStore 1.0.24 版本被拒原因分析

苹果的规定:2016年6月1日提交到App Store必须支持IPv6-only网络。  官方文档:https://developer.apple.com/library/mac/documen...
  • qq_27247497
  • qq_27247497
  • 2016年07月28日 09:57
  • 4970

工作中遇到的bug和一些问题处理

记录这些问题也是为了让自己以后处理问题会更加快捷工作中遇到的bug以及问题集合如下 :Android studio 命名: gradlew assembleRelease gradlew ass...
  • xing461217465
  • xing461217465
  • 2017年12月22日 09:02
  • 37

苹果列出了最新App被拒十大原因,你中枪了吗?

开发者在开发应用程序之前,熟悉苹果审核应用的技术、内容以及设计准则是非常重要的,可以大大降低应用审核被拒的可能性。 最近,苹果通过一个专门的页面给出了截止2016年10月10日应用提交审核被拒的十大...
  • whjay520
  • whjay520
  • 2016年11月22日 14:15
  • 791

iOS App 性能备忘

iOS App 性能备忘 APR 27TH, 2014 | COMMENTS 本文译自这里. 本备忘收集了很多可以提高 iOS 中 Objective-C 代码性能的代码片段和配...
  • ys410900345
  • ys410900345
  • 2016年05月20日 17:52
  • 550

iOS AppStory审核失败总结

1.项目用到极光推送,在安装app时,获取registrationID,在登录时邦定userID和registrationID,方便给每个人推送。但是产品定逻辑时就是登录前必须开启推送,在提交苹果审核...
  • liRuixuesongXueqian
  • liRuixuesongXueqian
  • 2017年08月02日 09:58
  • 1570

iOS 【AppStore 上架时由于 ipv6 原因被拒】

AppStore 上架时由于 ipv6 原因被拒 如何解决? 现如今支持 IPv6 的几个常用网络请求框架。...
  • Felicity294250051
  • Felicity294250051
  • 2017年06月05日 17:58
  • 938

利用NVM(Non-Volatile Memory)实现新型数据库系统

1.写在前面本博客的内容是前两篇介绍SCM内存基础与应用的后续,主要结合两篇论文来介绍利用SCM(Storage-Class Memory, 又称NVM)重新实现DBMS(DataBase Manag...
  • Meditator_hkx
  • Meditator_hkx
  • 2016年07月25日 12:52
  • 3935

Google优化工具Timeline的使用(Chrome 57已经改为performance(性能模板))

前期学习知识搭一下页面但是现在越来越注重网页性能的优化。 都推荐TimeLine所以开始使用performance进行性能的调试...
  • qq_26878975
  • qq_26878975
  • 2017年07月07日 10:53
  • 3305

浅谈浏览器对象——Performance API

为了得到脚本运行的精确耗时,需要一个高精度时间戳,传统的做法是使用Date对象的getTime方法,其不足之处在于: 1) getTime方法及Date对象的其他方法只能精确到毫秒级别,无法得到更小的...
  • zhouziyu2011
  • zhouziyu2011
  • 2017年04月25日 09:49
  • 1065
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Performance——manage app's memory
举报原因:
原因补充:

(最多只允许输入30个字)