首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

[转]内存储器管理 - 内存使用不当小结

2012-09-23 
[转]内存管理 --- 内存使用不当小结??因为我们的应用程序能够使用的内存有限,所以在编写代码的时候需要特

[转]内存管理 --- 内存使用不当小结

?

?

因为我们的应用程序能够使用的内存有限,所以在编写代码的时候需要特别注意内存

使用问题。如下是一些常见的内存使用不当的情况。?


?⑴查询数据库没有关闭游标?

描述:?

? ? 程序中经常会进行查询数据库的操作,但是经常会有使用完毕 Cursor后没有关闭的情

况。如果我们的查询结果集比较小,对内存的消耗不容易被发现,只有在常时间大量操

作的情况下才会复现内存问题,这样就会给以后的测试和问题排查带来困难和风险。?

??

示例代码:?

?

?

?

... ... public void operation() {     obj = initObj();     ...     final Object o = obj;     obj = null;     mHandler.post(new Runnable() {         public void run() {             useObj(o);         }     } } ... ... 

?示例B:?

? ? 假设我们希望在锁屏界面(LockScreen)中,监听系统中的电话服务以获取一些信息(如

信号强度等),则可以在LockScreen 中定义一个PhoneStateListener 的对象,同时将它

注册到TelephonyManager 服务中。对于LockScreen 对象,当需要显示锁屏界面的时候

就会创建一个LockScreen 对象,而当锁屏界面消失的时候LockScreen 对象就会被释放

掉。?

? ? 但是如果在释放LockScreen 对象的时候忘记取消我们之前注册的

PhoneStateListener 对象,则会导致LockScreen无法被垃圾回收。如果不断的使锁屏界

面显示和消失,则最终会由于大量的LockScreen 对象没有办法被回收而引起

OutOfMemory,使得system_process进程挂掉。?

? ? 总之当一个生命周期较短的对象A,被一个生命周期较长的对象B保有其引用的情况

下,在A的生命周期结束时,要在 B中清除掉对A的引用。

?

⑸其他?

?

?

Android 应用程序中最典型的需要注意释放资源的情况是在Activity的生命周期中,在

nPause()、onStop()、onDestroy()方法中需要适当的释放资源的情况。由于此情况很基

础,在此不详细说明,具体可以查看官方文档对Activity生命周期的介绍,以明确何时应

该释放哪些资源。?

热点排行