SystemUI开发记录

SystemUI   WindowManager.removeView(mNavigationBarView) 内存没有释放问题。

WindowManager.addView(mNavigationBarView,getNavigationBarLayoutParams());不断添加和删除会造成内存不断升高。

 

解决办法:防止mNavigationBarView重复创建。把mNavigationBarView缓存起来。创建NavigationBarView的时候,mNavigationBarViewCache也赋值一份,

remove的时候只remove   mNavigationBarView。再次添加的时候,把mNavigationBarViewCache的值给mNavigationBarView,

widowManager.addview(mNavigationBarView)。

 

 

问题:重复加载NavigationBarView 每次获取最近任务列表 和获取可以通过图标启动的

app耗时问题。

解决办法:给appList和recents添加缓存,用一个静态变量存储两个列表的值。

当最近任务发生变化的时候再去更新recents列表。通过 SystemServicesProxy.TaskStackListener进行监听任务的变化。

当app进行了卸载,安装,覆盖安装的时候重新更新appList。通过广播监听。

 

问题:发现系统启动变慢,进入桌面有闪黑屏现象。初步认定SystemUI加载耗时出现的短暂

闪黑屏现象。

问题分析:

1.SystemUI做了最近任务添加到导航栏里面。log日志查看加载最近任务的耗时。

2.SystemUI把可以通过图标启动的app放到导航栏的二级菜单里面。log日志查看耗时。

总结:这两个地方发现了耗时。就是因为加载数据的时候发生的耗时。

解决办法:加载可以通过图标启动的app列表的时候,可以等用户点击菜单按钮再进行加载。2.导航栏最近任务的加载不做优化。

 

 

问题:导航栏隐藏和显示切换的时候出现卡顿现象。

问题分析:查看隐藏和显示的实现原理。发现是用windowmanager进行了removeView  和addView,发现重复创建重复加载

NavigationBarView。

解决办法:方案一 不可行:起初是想GONE隐藏NavigationBarView,后发现,这样子做不可行,gone之后,导航栏出现黑色条仍然占据导航栏的位置。

方案二:把NavigationBarView缓存起来。addView的时候取缓存里面的view。这样就可以避免重复创建NavigationBarView带来的开销了。

 

问题:发现重复removeView和addView之后内存没得到释放。

问题分析:应该是有内存泄漏了。

解决办法:利用Android studio 的profile工具进行进程的内存情况抓取,操作发现内存泄漏之后进行gc操作。内存仍然不降。导出抓取的内存情况文件。

利用android sdk自带的文件转换工具,把内存使用情况的文件转换成 mat可以加载的文件。利用mat工具进行内存泄漏的分析。根据包名过滤弱引用软引用对象。

可以得到造成内存泄漏的对象。根据实际代码情况进行修改使其得到释放。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值