Android开发艺术探究读后知识点

2020-12-28  本文已影响0人  flynnny

1、P295 Window有三种类型:应用window、子window、系统window
2、P310 普通dialog有一个特殊之处,就是必须采用Activity的Context,如果用Application的Context会报错,是没有应用token所导致的,token一般只有Activity才有。另外系统Window可以不需要token,只需要指定对话框的window为系统window类型就可以正常弹出:

dialog.getWindow().setType(LayoutParams.TYPE_SYSTEM_ERROR);

然后声明权限

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

3、P311 Toast基于Window 采用了Handler 内部有两类IPC,第一类是Toast访问NMS,第二类是NMS回调Toast里的TN接口
4、P446 优化列表卡顿:1不要在getView里耗时操作,2控制异步任务的执行频率(滑动停止时才加载),3开启硬件加速
5、P449 CrashHandler获取crash信息
6、P455 Multidex解决方法数组越界 dex所能包含最大方法数为65536,这包含AndroidFrameWork、依赖的Jar包以及本身。解决办法:在build.gradle的defaultConfig中添加multiDexEnable true;
还需要在dependencies中添加multidex的依赖compile 'con.android.support:multidex:1.0.0'
第三部代码中支持 :mainfest指定Application为MultidexApplication 或 让Application继承MultidexApplication 或 重写Application的attachBaseContext方法,这个方法比onCreate先执行,里面在super加入一行“MultiDex.install(this);”
7、P493 内存泄漏
1静态变量导致内存泄漏
private static Context sContext
...
onCreate(...){
...
sContext = this;
}
如上导致Activity无法销毁
2单例模式导致内存泄漏
单例模式特点是生命周期和Application一致,Activity对象被单例模式对象持有时释放不了。
3属性动画导致内存泄漏
没有在onDestroy中停止动画,会一直播下去尽管看不到了,并且Activity的View会被动画持有,而View又持有了Activity,最终Activity无法释放。解决办法,在onDestroy中调用animator.cancel()来停止动画。

上一篇 下一篇

猜你喜欢

热点阅读