当 Android 应用程序退出时,并不清理其所占用的内存,Linux 内核进程也相应的继续存在,所谓“退出但不关闭”。从而使得用户调用程序时能够在第一时间得到响应。

当系统内存不足时,系统将激活内存回收过程。为了不因内存回收影响用户体验(如杀死当前的活动进程),

Android 基于进程中运行的组件及其状态规定了默认的五个回收优先级:

IMPORTANCE_FOREGROUND:

IMPORTANCE_VISIBLE:

IMPORTANCE_SERVICE:

IMPORTANCE_BACKGROUND:

IMPORTANCE_EMPTY:

  这几种优先级的回收顺序是Empty process、Background process、Service process、Visible process、Foreground process。

防止内存溢出 1.明确调用System.gc();2.图片处理完成后回收内存。  请在调用BitMap进行图片处理后进行内存回收。  bitmap.recycle();  这样会把刚刚用过的图片占用的内存释放。3.图片处理时指定大小。

1. 在Android平台上,长期保持一些资源的引用,造成一些内存不能释放,带来的内存泄露问题很多。比如:Context(下文中提到的Activity都是Context),在一些你需要保持你的首个类对象状态,并且把状态传入其他类对象中时,这样消除掉首个类对象之前,你必须先把接收类对象释放掉。需要注意一点的是:因为在Java或者Android内存机制中,顶点的结点释放前必须保证其他对象没有调用才能被系统GC回收释放。

综上所述,要避免内存泄露,主要要遵循以下几点:

 

  第一:不要为Context长期保存引用(要引用Context就要使得引用对象和它本身的生命周期保持一致)。

 

  第二:如果要使用到Context,尽量使用ApplicationContext去代替Context,因为ApplicationContext的生命周期较长,引用情况下不会造成内存泄露问题

 

  第三:在你不控制对象的生命周期的情况下避免在你的Activity中使用static变量。尽量使用WeakReference去代替一个static。

 

  第四:垃圾回收器并不保证能准确回收内存,这样在使用自己需要的内容时,主要生命周期和及时释放掉不需要的对象。尽量在Activity的生命周期结束时,在onDestroy中把我们做引用的其他对象做释放,比如:cursor.close()。



更多相关文章

  1. android oom 全解析
  2. Android(安卓)资源加载机制详解
  3. Android(安卓)内存管理 &Memory Leak & OOM 分析
  4. 在Android中使用Handler和Thread线程执行后台操作
  5. Android(安卓)UI开发专题(一) 之界面设计
  6. android之view获取getWidth()和getHeight()
  7. Android中内存优化
  8. Android(安卓)内存管理机制
  9. Android录音并根据音量大小实现简单动画效果

随机推荐

  1. Android界面绘制_canvas解析
  2. HTML5图片水面倒影和波纹动画,超逼真
  3. 解决 android 输入法弹出输入框被遮挡的
  4. 只因少写一个判空,我的代码上线后炸了!
  5. 【译】用 React 和 D3 创建图表
  6. Linux性能优化(十六)——中断绑定
  7. 在 JavaScript 中新的绘图思路[每日前端
  8. 来B站一年,我活成了人的模样!
  9. jQuery自定义样式下拉框,支持分组、多选和
  10. HTML5 3D立体图片相册