http://blog.csdn.net/yangzhiloveyou/article/details/14043801
http://blog.csdn.net/liyong625175856/article/details/10145967
背 景:
在 EMUI1.5 到 EMUI1.6 SystemUI 升级的过程中,SystemUI加入了主题切换的方案,其间加入了大量的代码,为的是能响应主题切换的变化,例如应用图片、字体等。
这个修改对SystemUI的稳定性来说是一个挑战,添加新的功能很可能会造成内存泄漏等问题,使得引入的问题越来越多,对代码的可维护性也大大的增加了难度。
方案解决过程:
1. 原方案接收onConfigurationChanged后,将整个视图依次重新加载
如图()
将父view中的子view置null,将其remove,最后将父view也重新加载,
一旦新添加的view,在切换的过程没有及时释放,就会引起view产生内存垃圾,导致内存泄露
方案修改(使用resource进行资源更新)
Resources statusbarwindowsresource = (Resources) mStatusBarWindow.getResources();//获得res资源对象
statusbarwindowsresource.flushLayoutCache(); //重新加载布局等资源
2. 存在的问题:在EMUI2.3主题应用,在应用字体时不需要重启手机(之前版本是会提示手机重启)
那么在应用字体之后,状态栏并不会重新加载,状态栏下的子view(下拉通知栏、快捷按钮)也不会进行重新加载,这样使得子view上的字体没有应用
解决方案:保持状态栏父view不进行重载,在切换主题时只是对子View进行重载,保持父控件不变(父控件的重载会导致状态栏收缩的一个现象)
总结: