androi开发中,如何避免内存泄露
2012-02-23 17:40
162 查看
在做android开发时,稍不注意,就会出现内存泄露问题,主要原因是因为我们无意间保留了大量却永远不再使用的对象引用。为了避免内存泄露,要注意一下事项
1.及时释放不再使用对象的引用 ,eg:obj=null;
2.Bitmap对象不在使用时调用recycle()释放内存
3. 查询数据库后关闭游标
4.在onPause中Remove 所有的SendMesseges发出的消息。不然容易造成Activity泄露
5.在onPause时,将显示ProgressDialog dissmiss掉,在需要时,在onResume时重新show,不然在onPause期间,系统会隐藏ProgressDialog消息,而app没有收 到,ProgressDialog将永远不会消失了。
6.不要对Context,Activity拥有较长时间的引用,否则也会造成与Context相关的内存泄露,使用Application这种Context类型,这种Context拥有和应用程序一样长的生命周期,并且不依赖Activity的生命周期。如果你打算保存一个长时间的对象,并且其需要一个Context,记得使用Application对象。你可以通过调用Context.getApplicationContext()或Activity.getApplication()轻松得到Application对象。
7 使用静态弱引用,内部类和它们对外部类的隐式引用也是很危险的,如果你不想控制内部类的生命周期,应避免在Activity中使用非静态的内部类,而应该使用静态的内部类,并在其中创建一个对Activity的弱引用WeakReference,如同ViewRoot和它的Winner类那样
8.长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景,eg:集合类对普通对象的引用
9.构造Adapter时,使用缓存的 convertView
10.对于多线程的处理,如果并发的线程很多,同时有频繁的创建和释放,可以通过concurrent类的线程池解决线程创建的效率瓶颈。
11.Android为每个程序分配的对内存可以通过Runtime类的totalMemory() freeMemory() 两个方法获取VM的一些内存信息,对于系统heap内存获取,可以通过Dalvik.VMRuntime类的getMinimumHeapSize() 方法获取最小可用堆内存,同时显示释放软引用可以调用该类的gcSoftReferences() 方法,获取更多的运行内存。
1.及时释放不再使用对象的引用 ,eg:obj=null;
2.Bitmap对象不在使用时调用recycle()释放内存
3. 查询数据库后关闭游标
4.在onPause中Remove 所有的SendMesseges发出的消息。不然容易造成Activity泄露
5.在onPause时,将显示ProgressDialog dissmiss掉,在需要时,在onResume时重新show,不然在onPause期间,系统会隐藏ProgressDialog消息,而app没有收 到,ProgressDialog将永远不会消失了。
6.不要对Context,Activity拥有较长时间的引用,否则也会造成与Context相关的内存泄露,使用Application这种Context类型,这种Context拥有和应用程序一样长的生命周期,并且不依赖Activity的生命周期。如果你打算保存一个长时间的对象,并且其需要一个Context,记得使用Application对象。你可以通过调用Context.getApplicationContext()或Activity.getApplication()轻松得到Application对象。
7 使用静态弱引用,内部类和它们对外部类的隐式引用也是很危险的,如果你不想控制内部类的生命周期,应避免在Activity中使用非静态的内部类,而应该使用静态的内部类,并在其中创建一个对Activity的弱引用WeakReference,如同ViewRoot和它的Winner类那样
8.长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景,eg:集合类对普通对象的引用
9.构造Adapter时,使用缓存的 convertView
10.对于多线程的处理,如果并发的线程很多,同时有频繁的创建和释放,可以通过concurrent类的线程池解决线程创建的效率瓶颈。
11.Android为每个程序分配的对内存可以通过Runtime类的totalMemory() freeMemory() 两个方法获取VM的一些内存信息,对于系统heap内存获取,可以通过Dalvik.VMRuntime类的getMinimumHeapSize() 方法获取最小可用堆内存,同时显示释放软引用可以调用该类的gcSoftReferences() 方法,获取更多的运行内存。
相关文章推荐
- androi开发中,如何避免内存泄露 .
- StarCraft开发:如何避免链表引起的游戏崩溃
- Android开发中如何避免 Out Of Memory(OOM) ?
- 在Android开发中巧妙使用观察者模式避免内存泄露
- Android官方开发文档Training系列课程中文版:如何避免ANR?
- 企业是如何避免重发开发的,
- Android开发中应该避免的内存泄露
- C#开发网站如何提高性能--避免不必要的执行操作
- 从真实案例出发:如何在协作开发中避免误解!
- 【腾讯bugly干货分享】开发iOS应用如何避免卡顿
- 在iPhone应用中如何避免内存泄露
- 在项目中,如何能够避免开发占用测试的时间?
- 在开发大型项目的时候,如何进行内存泄露检测的? 内存泄露怎么处理?
- 在Android开发中,有哪些好的内存优化方式?如何避免 Out Of Memory(OOM) ?
- 如何有效避免Unity3D游戏开发编辑器的“坑”
- 如何避免开发一款失败的产品(中篇)
- iOS开发---私有成员变量在block如何避免循环引用
- Android高级开发第一讲--如何在Android应用中避免内存溢出OOM问题
- VC++开发的ActiveX如何加入安全机制,避免IE中提示“在此页上的ActiveX控件和本页上的其他部分的交互可能不安全,你想允许这种交互吗?”
- 在开发过程中如何减少和避免硬编码