一、问题的提出
在某个IM的开发中,我们一直被一个性能问题困扰,由于聊天窗口关闭时需要做许多额外工作,诸如清除数据、反初始化控件、通过SDK通知插件……在这些额外工作中,通知插件是一个同步的操作,目前需要占用较可观的处理时间。于是,这些额外工作导致了关闭聊天窗口时性能低下,窗口不能立即被关闭,在屏幕上迟迟无法消失,严重影响了用户的体验!
二、一个蹩足的解决方案
既然无法提高关闭聊天窗口的速度,自然,我们想到了一个看似能解决问题的方案——何不在真正关闭聊天窗口前先HIDE一下它,先让它从屏幕上消失,给用户一个错觉,我们的聊天窗口再在HIDE状态慢慢地打扫干净。
我们在关闭时先HIDE窗口,处理一些必要的退出逻辑,再设置一个定时器,在定时器事件中才真正销毁窗口。
看起来一切正常,事实上,在前期,通过SDK给插件发消息的处理速度还未变得像现在这样慢的时候,是有效果的!随着开发的推进,这一方案越来越暴露出它的不足,到现在,不幸的是,基本上,它不工作了!我们关闭聊天窗口,虽然执行了HIDE,但它并不立即消失。当把聊天窗口放到主窗口上时,聊天窗口关闭时