最近给某甲方做的智慧楼宇大屏,有很多需要优化的点,比如在点开某个页面的时候,会在网上加载大量数据,会使程序卡住4秒钟,不仅体验很差,而且这个时候程序失去响应,如果用户点击屏幕,可能就白屏然后闪退了。
针对这点我做了好几处优化,优化了体验且,让程序不会有失去响应的情况
1.之前是UI动效和数据加载同时做,改成先做完UI动效,然后再加载数据。这个优化看起来没技术含量,但是让体验直接拉升,之前感觉UI切换的时候会卡一下。改完之后虽然程序还会卡,但是UI动效已经结束了,所以 看起来流畅多了。
2.生成图片用协程。这个界面需要请求大量数据,其中有文字也有图片,文字对于程序的压力其实是很小的,主要是 图片。或者对于Unity来说是 资源(assets)。通过HTTP请求下载的json数据中的图片,在json里是一个长字符串,其实就是一个颜色数组,在Unity里面需要将这个颜色数组转化为ui可以用的 sprite,就是Sprite.Creat (Texture2D t)方法,我的程序需要加载几十张图片。所以用协程来生成这个图片,最终减轻了CPU的工作密度,之前切换这个页面的时候会卡住4秒钟,所有生成图片方法用协程来做时候,切换这个页面会卡大概0.5秒
3.顺带一提,这些图片都是员工的头像,是一个实时数据,需要实时刷新。所以免不了频繁的http请求图片。这个是很耗内存的。一定要即时清理内存。调用Resource.UnloadUnuseAssets ,然后再GC一下。对于unity 来说 ,图片属于资源(assets)。对于传统的引用类型来说,引用计数为0时,就会在自动GC时被清理掉,但是资源,即时引用计数为0时,也不会被清理,需要手动调用Resource.UnloadUnuseAssets 否则,无限制的加载资源,内存直接爆掉,操作系统会kill掉这个程序,说白了就是闪退了