Android内存管理(续)

上篇文章讲解了内存管理中的OOM介绍以及如何的避免内存泄露,本文续写代码优化和图片管理

三、代码优化

1、代码优化

2、回收不可见的界面资源

这个地方我想说得是fragment,fragment销毁只是界面的销毁,他的数据还是会保留在内存中的,当fragment进行切换的时候,前一个fragment的ui会销毁掉,但是数据不会丢失。所以当一个fragment不再需要的时候尽量的把数据也清空。

3、布局优化

尽量使用view自身的参数替换多层次的结构

减少没必要的节点 merge

模块化布局 include ,尽量重用一个布局文件,可以减少以后的维护工作

4、复用内存

listview就是个复用典型。

四、图片管理

开发中一大部分oom都是图片问题。 有些情况下,应用所展示的图片数量多并且不在资源文件中,不能像是用资源文件那样获得图片,需要手动decode图片。

1、图片解码

bitmapfactory提供了一系列的decode方法, 直接解码大图片对时间和空间损耗都很大 ,所以在显示大图片的时候先要解码

2、缩略图

这是一种方案,先给一张缩略图,点击后给出原图,能一开始就只加载缩小的bitmap么? 能够获得合适的缩放比例吗?

3、图片内存缓存和外存缓存

极端占用时间:解码消耗,用户体验

极端占用空间:oom

折中方案:所有图片常驻内存但不超过某个大小(取oom或者vm的1/2)

4、软弱引用

自2.3之后,GC被放入其他线程,会更积极的回收内存,尤其是软引用和弱引用

lruCache:  2.3之后出现,v4包中有,使用方式和map类似,维持key和value,最终使得内存的占用维持在一个固定值

5、图片的释放

heapsize仅仅是描述在虚拟机中占用内存,在3.0之前,bitmap对象还需要占用native层的内存,  这部分内存监视困难且回收时机并不一定,

所以要使用recycle(),之后再也不能用了,目的是告诉c层尽快的释放

时间: 2024-10-13 01:13:34

Android内存管理(续)的相关文章

Android内存管理之道

相信一步步走过来的Android从业者,每个人都会遇到OOM的情况.如何避免和防范OOM的出现,对于每一个程序员来说确实是一门必不可少的能力.今天我们就谈谈在Android平台下内存的管理之道,开始今天的主题之前,先再次回顾两个概念. 内存泄漏:对象在内存heap堆中中分配的空间,当不再使用或没有引用指向的情况下,仍不能被GC正常回收的情况.多数出现在不合理的编码情况下,比如在Activity中注册了一个广播接收器,但是在页面关闭的时候进行unRegister,就会出现内存溢出的现象.通常情况下

[Android Memory] Android内存管理、监测剖析

转载自:http://blog.csdn.net/anlegor/article/details/23398785 Android内存管理机制: Android内存管理主要有:LowMemory Killer机制,Ashmem,PMEM/ION及Native内存和Dalvik内存管理管理和JVM垃圾回收机制. LowMemory Killer机制: 源码位置drivers/staging/Android/lowmemorykiller.c Android是一个多任务系统,也就是说可以同时运行多个

Android 内存管理机制详解

??嵌入式设备的一个普遍特点是内存容量相对有限.当运行的程序超过一定数量时,或者涉及复杂的计算时,很可能出现内存不足,进而导致系统卡顿的现象.Android 系统也不例外,它同样面临着设备物理内存短缺的困境.对于已经启动过一次的Android程序,再一次启动所花的时间会明显减少.原因在于Android系统并不马上清理那些已经"淡出视野"的程序(比如你调用Activity.finish退出UI界面).它们在一定的时间里仍然驻留在内存中.这样做的好处是明显的,即下一次启动不需要再为程序重新

android 内存管理研究

1. 内存管理基础知识 http://www.cnblogs.com/xingfuzzhd/p/3485924.html   1. mImageView.setImageResource(R.drawable.my_image); 这段代码会调用 BitmapFactory.decodeStream() 生成一个 Bitmap.所以不要以为它比自己创建 Bitmap 节省内存. 3.  实际测试: 我使用了多种调用图片的方法来测试: 第一种: // 直接载入资源 idImageView imag

Android内存管理机制详解 (zhuan)

http://www.2cto.com/kf/201212/175786.html 与windows内存区别 在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在这方面,区别于 Windows的内存管理.主要特点是,无论物理内存有多大,Linux都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能.而Windows是只在需要内存时,才为应用程序分配内存,

Android内存管理的原理--进程管理

Android内存管理的原理--进程管理 Android采取了一种有别于 Linux 的进程管理策略,有别于Linux的在进程活动停止后就结束该进程,Android把这些进程都保留在内存中,直到系统需要更多内存为止.这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度. 那Android什么时候结束进程?结束哪个进程呢? 之前普遍的认识是Android是依据一个名为LRU(last recently used 最近使用过的程序)列表,将程

移动端测试===Android内存管理: 理解App的PSS

Android内存管理: 理解App的PSS 原文链接:http://www.littleeye.co/blog/2013/06/11/android-memory-management-understanding-app-pss/ 当在应用程序上运行Little Eye时,在内存视图中,会报告有关应用程序内存的3个重要统计信息. Dalvik内存使用情况,即Java堆消耗的内存量,Native内存,即JVM外部进程使用的内存量. 然后是第三个统计量,被称为"PSS". 什么是PSS?

Android内存管理

首先Android理机制相当复杂.想要讲清楚比較困难.其次对于绝大多数用户来说.仅仅关心内存够不够用,至于内存怎样管理的这样的技术细节,不是用户须要去考虑的,写这样一个专题有没有意义?毕竟我们是用手机,不是来研究手机的. 最后的顾虑是这个专题会不会太技术化了.绝大部分用户不会看或者说缺乏对应的背景. 可是有一种激励促使着我去写这样一个专题,一直以来,MIUI团队在与用户互动的过程中也同一时候在向用户学习.你们的一些建议或者点子总会给我们启发,这个专题中我相信你们相同能给以启发.尽管说内存管理是一

Android内存管理机制

首先你要知道Android系统是基于Linux2.6内核开发的. 而Linux与Windows在内存管理上是不同的.使用过Linux系统的人都知道,Linux系统的空闲的内存往往很少,给人感觉好像内存不够用了.其实,不然,这正式Linux内存管理的一个优秀的特性.无论内存的物理内存有多大,Linux系统都将充分利用,会将一些程序调用过的数据读入内存中,利用内存读写的高速特性来提供Linux系统的数据访问性能.而Windows是在需要内存时,才为应用程序分配内存,并不能充分的利用大容量内存空间.

Android 内存管理 &Memory Leak & OOM 分析

1.Android 进程管理&内存 Android主要应用在嵌入式设备当中,而嵌入式设备由于一些众所周知的条件限制,通常都不会有很高的配置,特别是内存是比较有限的.如果我们编写的代 码当中有太多的对内存使用不当的地方,难免会使得我们的设备运行缓慢,甚至是死机.为了能够使得Android应用程序安全且快速的运行,Android 的每个应用程序都会使用一个专有的Dalvik虚拟机实例来运行,它是由Zygote服务进程演变过来的,也就是说每个应用程序都是在属于自己的进程中运行的.一方面,如果程序在运行