android内容优化之道

1.共享内存

android尝试跨进程共享ram页,分配和回收内存

每个进程都被限制到一个单一的虚拟内存范围内

Dalvik堆不会压缩堆的逻辑空间,这意味着Android不会进行碎片整理来腾出空间,只有空闲空间在堆的尾部时(at the end of the heap),Android才可以压缩逻辑堆的空间。但这并不意味着堆使用的物理内存不能被压缩

当App内存达到了空间最大值,并尝试分配更多的内存,就会发生oom

用户切换APP时,Android会使用LRU缓存来保存那些被切换的APP而不是使用交换空间来实现

在开发的所有阶段你都应该考虑RAM的限制,即使是在设计阶段,你还没有开始编码工作。你应该使用以下技术来管理你的APP内存。

app内存优化 :

减少service的使用,因为service不使用的时候,还在后台运行,会占用内存,当service没有占用的时候一定要结束service,

当用户界面隐藏时,释放内存

当用户退出UI界面时,使用onTrimMemory()回调函数,你应该使用这个方法去监听TRIM_MEMORY_UI_HIDDEN这个值,他表示UI界面当前正在隐藏,使用被UI界面占用的内存

app所有的界面都隐藏时,才会在OnTrimMemory()回调函数中检测到TRIM_MEMORY_UI_HIDDEN这个值,与onStop不同,onStop是界面隐藏时调用

内存紧张时,释放内存

检查你应该使用多少内存

不同的安卓数量有着不同的内存,使用getMemoryClass获得可以使用内存大额大小

使用bitmaps避免内存浪费,当你加载一张bitmap时,如果他分辨率过高

使用最佳的数据容器:如sparseArray,sparseBooleanArray,sparseLongArray,避免对键值对的装箱,普通的hashmap会花费更多的内存,因为他需要为每一个映射分配一个实体

注意内存开销

尽量避免使用枚举类型,枚举类型占用空间是普通类型的两倍。

小心代码抽象化

抽象化需要更多的代码来执行他,需要更多的开销

为序列化数据使用nano protobufs

数据缓冲区是一种有谷歌序列化而设计的泛语言

不要依赖注入框架

使用proGuard来去除不必要的代码

在最终生成的apk文件使用zipalign,通过androidMainFest.xml文件中声明的android:process来为应用分身,是你的service运行在一个单独的进程中

更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. Android应用如何支持屏幕多尺寸多分辨率问题
  6. Android入门篇五:使用全局变量在Activity之间传递数据
  7. Android验证码倒计时实现方式总结
  8. Android工程下build target,minSdkVersion,targetSdkVersion,maxSdk
  9. 18、ESC/POS指令集在android设备上使用实例(通过socket)

随机推荐

  1. Android(安卓)异步开发之 AsyncQueryHand
  2. 利用ViewDragHelper轻松实现Android拼图
  3. AndroidStudio3.4+ 导入旧版本moudle出现
  4. Android画布和图形绘制---Canvas and Dra
  5. Android(安卓)Studio项目将Module依赖(lib
  6. Android.mk文件语法规范及使用模板
  7. 自定义 ProgressBar 进度条 自定义样式
  8. Android单元测试,模拟http的get和post请求
  9. Android(安卓)xutil3.0完全解析
  10. Android轩辕剑之ActionBar之三