- 情境(某种行为产生的动机,目标,结果,状态)
(1)android为每个进程分配16M(或24,32,64)的内存空间,因为避免单个应用OOM错误后导致整个系统崩溃!。
- 冲突(问题,风险)
(2)超出给定的内存空间后,会发生OOM错误。
- 疑问(分析情境和冲突的原因,给疑问提出答案)
(3)如何确保在有效的内存中,正确的释放内存空间,防止oom错误,变得非常重要,因为这样会影响用户的体验。
- 回答(解决方案,策略,关键行为,锚点,结论)
(4)因此,现在实施一项“android内存管理方案”确保不发生oom错误,从而提高用户体验(期望)。
可能原因:
(1)目前我们涉及到Bitmap的处理上。然而在其他方面可以也会出现OOM错误(Memory Leak),譬如:Drawable, RemoteViews, Receiver, Cursor,InputStream, MediaPlayer,JNI(C/C++)等,针对以上问题,eclipse提供了MAT( 在这里)工具检查可能的原因(关键行为)(详细分析MAT使用: http://www.blogjava.net/rosen/archive/2010/05/21/321575.html),下面是我们的解决方案:
(1)以时间换空间,将Bitmap文件缓存本地,内存中只保留几张图片。然而有时还是会出现oom。完全隔离内存,内存中不保留图片,采取完全读取本地文件。
(2)SoftReference object-cache(在内存引用上做些处理,常用的有软引用、强化引用、弱引用)
(3)使用泛型算法或者泛型容器多多少少都会引起Memory Leak,在现代面向对象编程中似乎Memory Leak已经无法避免了,总之能自己写的算法就不要用泛型
其他解决方案
http://chiyx.iteye.com/blog/1528782
http://mzh3344258.blog.51cto.com/1823534/804237
http://www.cnblogs.com/xingmeng/archive/2012/05/23/2514354.html