您的位置:首页 > 其它

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() 方法,获取更多的运行内存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: