什么是冷启动?
当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。
优化方式分为两种
第一种 -> 视觉优化:
简而言之,就是用户视觉感官上觉得app启动速度变快了,一般方案是增加闪屏页LanuchActivity。指定其主题样式,增加图片并且背景透明化。
第二种 -> 代码优化:
1.项目中添加一个Loading场景,这个场景会是游戏启动的第一个场景。
2.在Loading场景中尽量少的依赖,尽量少的纹理依赖、AssetBundle依赖、代码依赖,总之,这个Loading场景一定要尽量少的依赖,这个场景一定要尽量简单,这样才能保证尽快的加载速度。
3.在游戏中尽量少的使用Resources方式管理资源,Resources目录下面的所有资源会在ResourceManager中记录下来,而ResourceManager就是一个文件,通常是一个YAML格式的文本文件。而这个文件是会在冷启动时加载的。所以Resources目录下面的有越多的资源,那么这个ResourceManager就会越大,加载时间也会越长。
4.使用Resources方式管理资源还有一个坏处,就是所有的资源都是统一管理的,这样的资源的管理粒度没办法控制。建议使用AssetBundle的方式管理,这样可以使用多个AssetBundle来管理资源。把在Loading场景中需要的最小资源集放在一个AssetBundle中,这样在冷启动时启动Loading场景时,只需要加载一个AssetBundle即可。选择合适的粒度管理AssetBundle,可以在合适的时候加载某一个AssetBundle,不使用时就可以卸载某一个AssetBundle。
5.在Loading场景中,添加一个进度条,然后 同步加载 进入主场景所需要的AssetBundle,这样用户就不会感到等待时间太烦躁了。同步加载要比异步加载时间更短。
6.纹理资源在游戏中一般是最大的资源,选择合适的压缩格式进行压缩,既可以减少内存占用,又能够加快资源的加载速度。压缩格式的选择要从显示效果和压缩率上进行权衡。一般在Android上使用ETC格式,在iOS上使用PVRTC格式,在某些情况下,可能还可以考虑使用Alpha通道分离技术进行压缩处理。
7.代码文件可以编译成 .dll 文件, 减少大量TextAsset文件导致的碎片化加载时间。
8.强烈建议使用IL2CPP后端,如果使用IL2CPP,则可以忽略第7条。
以上就是我总结的一些冷启动的优化方式。