什么是OOM? 当前占用的内存加上我们申请的内存资源超过了Dalvik虚拟机的最大内存限制就会抛出Out Of Memory异常. 一些容易混淆的概念: 内存溢出:指的就是OOM. 内存抖动:是短时间内大量的对象被创建,然后又被马上释放这些顺间所产生对象,会严重点用内存区[最近刚分配的对象会放在Young Generation区域],由于刚创建的对象又快速被释放这样就会对堆内存的压力从而触发更多的GC. 内存泄漏:这个是开发中比较常见的,指的是进程中的某些对象已经没有其它对象引用它了,但是它又能…
内存管理机制概述: 分配机制:操作系统会为每一个进程分配一个合理的内存大小,从而保证每一个进程能够正常的运行,不至于内存不够使用,或者某个进程占用过多的内存. 回收机制:在系统内存不足的时候,系统有一个合理再分配资源的一个机制,从而保证新的进程能够正常运行,回收的时候就要杀死那些正在占用内存的进程,而Android系统也有一套自己的回收机制. Android内存管理机制: 分配机制:Android在为每个进程分配内存的时候采用了弹性的分配方式,一开始不会为APP分配太多的内存,而是开始只是分配一…
UI卡顿原理: “60fps(Frames Per Second每秒传输帧数) ----> 16ms” 针对上面标红的数字,下面具体说明一下:最主要的根源在于渲染性,Android会每隔16ms会发出信号,触发对UI进行渲染,如果每一次都渲染成功,则就达到流畅画面所需要的60fps,也就是每秒60针,为了能够达到60fps,程序的大多数操作必须在16ms内完成,也就是1000ms/60=16ms,为什么要把标准设定在60fps呢?人脑对于画面的连贯性是有一定的限制的,而android系统把这种流…
Android不用静态变量存储数据: 静态变量等数据由于进程已经被杀死而被初始化.在Android中应用进程不是安全的,因为它会有系统给kill掉,但是在实际中可能会有这样的一个假象:当app被杀掉之后会重新再开的,其实这个再打开是重新创建了一个进程,启动上一次打开的Activity,由于此时的静态变量又会重新初始化则会造成数据不安全. 使用其它数据传输方式:文件 / sp / contentProvider. 有关SharedPreference的安全问题: 不能跨进程同步. 存储Shared…
什么是冷启动: 冷启动的定义:冷启动就是在启动应用前,系统中没有该应用的任何进程信息.实际也就是要执行Application.onCreate()方法的那次启动. 冷启动 / 热启动的区别:热启动:用户使用返回键退出应用,然后马上又重新启动应用.实际上也就是Application.onCreate()不会触发,因为进程还是存活的.所以两者的区别就比较能理解了. 冷启动时间的计算:这个时间值从应用启动(创建进程)开始计算,到完成视图的第一次绘制(既Activity内容对用户可见)为止. 冷启动流程…
Java内存泄漏基础知识: Java的内存的分配策略 a.静态存储区:也叫方法区,主要是存放一些静态数据及全局变量等,在程序编译时就已经分配好了,并且在静态存储区中存放的变量在整个程序运行期间都存在.b.栈区:执行方法时,方法中的局部变量会在栈上创建内在空间,并在方法执行结束之后这些变量及所持有的内存会自动释放.因为栈内存分配运算内置于处理器当中,所以效率很高,但是栈区的容量有限.c.堆区:也就动态内存分配,通常是我们new出来的内存,在不使用时会由java回收器来负责回收. Java是如何管理…
什么是ANR? Application Not Responding 造成ANR的主要原因: 应用程序的响应性是由ActivityManager和WindowManager系统服务监视的,当监视到在Activity中主线程点击超过5秒木有响应或者是在广播UI线程里超过10秒木有响应则会导致ANR.下面具体列举一下: 主线程被I/O操作(从4.0之后网络IO不允许在主线程中)阻塞. 主线程中存在耗时的计算. 造成ANR的主要原因:Android中哪些操作是在主线程呢? Activity的所有生命周…
recycle: 对于Bitmap来说内存分为Java内存和Native内存,而当图片不用时建议调用一下recycle()方法来将native层的内存进行回收,下面看一下它的源码官方对它的解释: LRU: 它是Least Recently Used[最近最少使用]的缩写,通常可以用做Bitmap的存储,会将最近最少使用的对象给清除出去,看一下它的源代码: 其中再提供了一些操作这个数据结构的方法: 而当缓存满的时候,则会调用trimToSize()方法将用得最久用得最少的缓存对象从队列中清除,并添…
[工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只给出啥啥啥不能用,啥啥啥该咋用等,却很少有较为系统的进行真正性能案例分析的,大多数都是嘴上喊喊或者死记住规则而已(当然了,这话我自己听着都有些刺耳,实在不好意思,其实关于性能优化的优质博文网上也还是有很多的,…
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只给出啥啥啥不能用,啥啥啥该咋用等,却很少有较为系统的进行真正性能案例分析的,大多数都是嘴上喊喊或者死记住规则而已(当然了,这话我自己听着都有些刺耳,实在不好意思,其实关于性能优化的优质博文网上也还是有很多的,譬如Google官方都已经推出了优化专题,我这里只是总结下自的感悟而已,若有得罪欢迎拍砖,我…