当前位置: 首页 > news >正文

android 内存使用

2011-04-28 15:03

     众所周知,在写 android 程序的时候,很容易出现 OOM ,而出现的时机大多数是由 Bitmap decode 引发的:

                           ERROR/AndroidRuntime(16350): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

      我们知道,android程序内存一般限制在16M,当然也有24M的,而android程序内存被分为2部分:native和dalvik,dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是 native+dalvik 不能超过最大限制。

      用以下命令可以查看程序的内存使用情况:

adb shell dumpsys meminfo $package_name or $pid   //使用程序的包名或者进程id

      用android自带的gallery程序为例:


       具体每一项代表什么,参考:http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-android#2299813,我们比较关心的是这2行:

 

 

       其中size是需要的内存,而allocated是分配了的内存,对应的2列分别是native和dalvik,当总数也就是total这一列超过单个程序内存的最大限制时,OOM就很有可能会出现了。

       多数时候,发生OOM 都是在做一些跟图片相关的操作,以下提出一些建议尽量可以减少这种情况的发生:

1.decode bitmap 的时候,尽量配置下Options,例如:inSameSize

2.Bitmap使用完以后,调用 bitmap.recycle()来释放内存

3.如果应用是基于图片的应用,尽量采用LazyLoad和DymanicRecycle

4.decode bitmap 的时候,将decode代码 try catch 出来,catch oom error,避免程序crash,可以在catch里面做一些释放内存操作

相关文章:

  • android 常用adb shell
  • [转]android listview 连续调用 getview问题分析及解决。
  • android自动弹出软键盘
  • 使用Android自带的图标
  • 斯坦福iphone视频教程 – 中英字幕
  • Android中文文档——工具屋
  • Android 避免bitmap内存限制
  • 圆角背景的ListView
  • LayerDrawable层叠样式layer-list
  • android的edittext默认不获得焦点
  • Android中AsyncTask的用法实例
  • Eclipse中如何更改字体及字体大小
  • Android通过http协议POST传输方式
  • Android四种Activity的加载模式
  • 谷歌Android UI设计技巧:优秀UI设计准则
  • 0基础学习移动端适配
  • ES6系列(二)变量的解构赋值
  • EventListener原理
  • Fabric架构演变之路
  • Java应用性能调优
  • js中的正则表达式入门
  • Mithril.js 入门介绍
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 基于webpack 的 vue 多页架构
  • 简单易用的leetcode开发测试工具(npm)
  • 实习面试笔记
  • 一些关于Rust在2019年的思考
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 06-01 点餐小程序前台界面搭建
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​批处理文件中的errorlevel用法
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (zt)最盛行的警世狂言(爆笑)
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (转)http-server应用
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • . Flume面试题
  • .cn根服务器被攻击之后
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net mvc部分视图
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .Net各种迷惑命名解释
  • @RequestBody与@ResponseBody的使用
  • @开发者,一文搞懂什么是 C# 计时器!
  • [.net] 如何在mail的加入正文显示图片
  • [APUE]进程关系(下)
  • [ARM]ldr 和 adr 伪指令的区别
  • [AX]AX2012 R2 出差申请和支出报告
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn
  • [C++]指针与结构体
  • [Electron] 将应用打包成供Ubuntu、Debian平台下安装的deb包
  • [FUNC]判断窗口在哪一个屏幕上