LeakCanary原理分析

本文探讨了内存溢出(OOM)的原因,如连续内存不足和Activity/Fragment生命周期监控。深入解析了垃圾回收(GC)机制,重点介绍了GCRoot的作用和引用类型(强软弱虚引用)。同时涵盖了自启动应用流程和启动时的黑白屏现象。技术关键词包括内存管理、Activity生命周期、GC原理、引用计数和Android应用启动问题。

1、OOM产生的原因(内存溢出)?

连续的内存块,内存不够。监控生命周期(Lifecycle缺陷是只能监控单个Activity生命周期)Application中registActivityLifecycleCallBack函数会监控。通过Activity执行onCreate()中会调用getAppliacation().dispatchActivityOnCrate()函数。同样Fragment也是有一样的方法。只需要在Application中注册即可。(这里需要注意)

2、GC回收原理?

只要是能被GCroot引用的对象,都不会被回收,不被GcRoot引用则会回收。出现内存泄漏原因就是本该回收的对象,被GC直接或间接的持有,无法释放。

3、哪些对象可以作为GCroot?

静态变量,常量池,线程栈变量。单例、JNI(指针)都可以作为GCroot

4、强软弱虚引用?

强引用:必不可少的东西,平时new出来得对象。不会被垃圾回收器回收。当内存空间不足时宁愿抛出OOM异常,也不会回收。

软引用:SoftReference引用(内存够的时候,GC不会回收,内存不够的时候,gc才会回收,适用于图片缓存)Bitmap、Activity的缓存都有用。

软引用:WeakRefremce (只要触发GC,就会被回收)

虚引用:不可以独立使用,必须跟一个引用队列。随时都可能被回收。

引用队列:当引用被回收后,会加入到引用队列。

5、自启动问题?

不需要install。new Application 首先会调用provider.oncreate 才会调用application.oncreate()

启动的时候为啥会黑白屏?

Activity还未启动,WMS未启动,Application有一个黑色或者白色的背景。直到你的第一个Activity onResume执行完。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值