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

被折叠的 条评论
为什么被折叠?



