Heap_Size_Overflow_Android内存机制及溢出归类.pdfVIP

Heap_Size_Overflow_Android内存机制及溢出归类.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android 的内存机制和溢出说明 Android 的虚拟机是基于寄存器的 Dalvik ,它的最大堆大小一般是 16M。但是 Android 采用的是 Java 语言编写,所在很大程度上, Android 的内存机制等同于 Java 的内存机制 (Java 内存机制在网上帖子很多,大家有兴趣了解的可以去谷歌或者百度查找一些资料)。 因此在一些程序员开发的时候,内存的限制问题给很多初学开发者带来内存溢出等严重问 题。在我们不使用一些内存的时候, 我们要尽量在 Android 或者其他平台上避免在运行其他 程序时, 保存必要的状态, 使得一些死进程所带来的内存问题, 应该尽量在关闭程序或者保 存状态的时候释放掉。这样能提高系统在运行方面的流畅性。 Android 的内存主要表现在: 1. 在 Android 平台上,长期保持一些资源的引用,造成一些内存不能释放,带来的内 存泄露问题很多。 比如: Context (下文中提到的 Activity 都是 Context ),在一些 你需要保持你的首个类对象状态,并且把状态传入其他类对象中时,这样消除掉首 个类对象之前,你必须先把接收类对象释放掉。需要注意一点的是:因为在 Java 或 者 Android 内存机制中,顶点的结点释放前必须保证其他对象没有调用才能被系统 GC回收释放。我们看一段代码: @Override protected void onCreate(Bundle state) { super.onCreate(state); TextView label = new TextView(this); label.setText(Leaks are bad); setContentView(label); } 这个代码的意思就是我们把一个 TextView 的实例加载到了我们正在运行的 Activity (Context )当中,因此,通过 GC回收机制,我们知道,要释放 Context , 就必须先释放掉引用他的一些对象。如果没有,那在要释放 Context 的时候,你会 发现会有大量的内存溢出。所以在你不小心的情况下内存溢出是一件非常容易的事 情。 2. 保存一些对象时,同时也会造成内存泄露 。最简单的比如说位图( Bitmap ),比如 说:在屏幕旋转时,会破坏当前保持的一个 Activity 状态,并且重新申请生成新的 Activity ,直到新的 Activity 状态被保存。我们再看一段代码: private static Drawable sBackground; @Override protected void onCreate(Bundle state) { super.onCreate(state); TextView label = new TextView(this); label.setText(Leaks are bad); if (sBackground == null) { sBackground = getDrawable(R.drawable.large_bitmap); } label.setBackgroundDrawable(sBackground); setContentView(label); } 这个代码是非常快的同时也是错误的。它的内存泄露很容易出在屏幕转移的方 向上。虽然我们会发现没有显示的保存

文档评论(0)

肖四妹学教育 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档