1:内存泄露:
原因;(1):持有Context引用造成泄漏
(2):非静态类内部类引发的泄漏
(3):后台线程操作引发的泄漏
(4):线程之间通过Handler通信引起的泄漏
(5):ListAdapter的getView()函数没使用convertView
(6):Bitmap对象没使用时,用recycle()方法回收内存
(7):Cursor游标未关闭
危害:
(1):内存变小 (2):程序卡顿(3):退出(4):用户流失
排查:
(1):统计平台oom (2):内存分析工具 (3):修复
LeakCanary工具:
(1):测每个界面 (2):有泄漏会toast一下,解决。 (3):完成
2:Activity的生命周期:‘
onCreate():创建Activity是调用。
onStart():activity变为在屏幕上对用户可见时调用。
onResume():activity开始与用户交互时使用。
onPause():activty被暂停或回收cpu和其他资源时调用。
onStop();activity转为不可见阶段时及后续的生命周期。
onRestart():重启activity时调用,在栈中。
onDestroy();被完全从系统内存中移出时调用。
3:横竖屏切换时Activity的生命周期:
情况1:不设置Activity的android:ConfigChange时,切屏会重新调用各个生命周期,切横屏执行一次,竖屏2次。
情况2:设置Activity的android:ConfigChange="orgentation"切横屏竖屏都会执行一次。
情况3:android:ConfigChange="orgentation"|keyboardHidden切屏不会调用各个生命周期,只会执行onConfigurationChanged方法
4:如何让将一个Activity设置成窗口的样式?
方法1:在styles.xml文件,新建Dialog的Style
<styles name = "Theme.FloatActivity" parent = "android:style/Theme.Dialog"></style>
方法2:在主配置清单中,需要窗口的activity中添加属性,android:theme = "@style/Theme.FloatActivity"
5:如何安全退出Activity?
(1):finish
(2):记录打开的每个Activity,退出时关闭每个Activity
(3):发送特定的广播,每个Activity收到广播时关闭即可。