android 内存管理机制、异常、垃圾回收
来源:互联网 发布:linux rpm包下载 编辑:程序博客网 时间:2024/06/05 18:21
当 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()。
- android 内存管理机制、异常、垃圾回收
- GC回收与内存管理机制,垃圾回收
- 详解.NET内存管理机制与垃圾回收
- java内存管理机制+垃圾回收机制(*****)
- JVM内存管理机制和垃圾回收机制
- php垃圾回收和内存管理机制
- JVM内存管理机制和垃圾回收机制
- JVM内存管理机制和垃圾回收机制
- PHP内存管理机制与垃圾回收机制
- 对android虚拟机的理解,包括内存管理机制,垃圾回收机制
- 对android虚拟机的理解,包括内存管理机制垃圾回收机制。dalvik和art区别
- 自动内存管理机制(4)——垃圾回收算法
- java虚拟机内存管理机制(二):了解JVM的内存管理与垃圾回收
- java虚拟机内存管理机制(二):了解JVM的内存管理与垃圾回收
- java虚拟机内存管理机制(二):了解JVM的内存管理与垃圾回收
- java虚拟机内存管理机制(二):了解JVM的内存管理与垃圾回收
- Android内存调试垃圾回收信息分类
- Android的垃圾回收与内存泄露
- 如何在Ubuntu 14.04中安装最新版Eclipse
- 修改tomcat浏览器地址栏图标
- 网络推送的简单使用
- 21-IO流-21-IO流(字节流-操作文件基本演示)
- iOS 9 分屏多任务(2):Slide Over & Split View快速入门
- android 内存管理机制、异常、垃圾回收
- addSubview和insertSubview的理解
- POJ 2260 Error Correction 水
- 9秒学院iOS游戏开发从掌握到拥有,你只需四步
- linux vi 打开文件始终显示readonly
- OC description方法
- UITableView的创建与使用
- 21-IO流-22-IO流(字节流-练习-复制MP3)
- 算法竞赛入门经典: 第四章 函数与递归 4.2组合数