Android进阶

一、性能优化

ANR,内存溢出,内存抖动,内存泄漏,UI卡顿,冷启动优化
(https://www.jianshu.com/p/3e44250ca2de)
[https://www.cnblogs.com/zhaojianhua/p/8574136.html]
内存泄漏:是指无用对象(不在使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间的浪费。
内存抖动是指内存在短时间内频繁地分配和回收,而频繁的gc会导致卡顿,严重时和内存泄漏一样会导致OOM。
内存溢出主要是由于加载大的图片引起的。

  1. 单例和静态变量
    静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

  2. 匿名内部类
    非静态内部类持有外部类的引用,如果在这个内部类里面有static等变量,就会和应用的生命周期一样长,所以就会使外部的activity没法释放。

3.handler
mHandler是MainActivity的非静态内部类的实例,它持有外部类的引用。handler的消息是在一个loop中不断的轮询处理消息,那么当MainActivity退出时,消息队列中还有没处理的消息或正在处理的消息,所以会造成内存泄漏

推荐阅读更多精彩内容