首页 游戏任务 正文

如何优化正在初始化?5个提升效率小技巧!

今天突然发现项目里有个"正在初始化"的破玩意儿卡得跟老牛拉破车似的,搞得用户都在群里骂街了。气得我撸起袖子直接开干,顺手把折腾过程记下来了。

第一刀:先揪出拖后腿的龟孙子

抄起Android Studio的Profiler对着初始化过程怼了十分钟。好家伙,有个第三方SDK初始化居然偷偷吃了整整三秒!查了文档才发现这货默认加载了用不着的功能模块,赶紧在初始化代码里咔咔两刀把没用的参数砍了:

如何优化正在初始化?5个提升效率小技巧!

  • 原代码: *(context, ALL)
  • 改代码: *(context, BASIC_MODE)

完事儿再跑,这龟孙子立马缩到800毫秒了

第二招:堵住重复初始化的漏勺

晚上洗脚时候突然想到,用户狂点按钮会不会触发多次初始化?第二天蹲马桶时翻代码验证,果然有个按钮回调里裸调初始化方法!赶紧拿boolean isInit当门神把着:

如何优化正在初始化?5个提升效率小技巧!

  • if (!isInit) {
  •     doHeavyInit();
  •     isInit = true;

顺手在Application类加了全局初始化状态标记,省得其他页面手贱

第三板斧:把串行任务拆了炖

拿Traceview看调用栈发现六个初始化任务排着长队,前边的拉屎后边的干瞪眼。直接把不相关的三个扔进线程池:

如何优化正在初始化?5个提升效率小技巧!

  • ExecutorService pool = *();
  • *( ()->{ initBannerAd(); });
  • *( ()->{ initPushService(); });

主线程压力顿时少一半,进度条肉眼可见变顺畅

第四式:给用户喂定心丸

想起来上次自己等电梯时盯着数字跳动就不焦虑了,于是火速在初始化前塞了个进度条:

  • ProgressBar mBar = findViewById(...);
  • *(INIT_STEPS);
  • 每完成个任务就 *(1);

还配了文字提示“正在加载核心武器...”,用户反馈说终于不觉得卡死了

绝招:给日志上缰绳

发现Release包初始化还是慢半拍,排查发现是日志工具在疯狂写文件。直接祭出大法:

  • if (*) {
  •     Log.d("INIT","输出调试信息");

正式包瞬间清净,顺带把过度输出的第三方库日志级别调成WARNING

折腾完这五板斧再测,初始化时间从7秒缩到2.3秒。用户群里嚷嚷卡顿的消息终于消停了,今晚能摸鱼刷会儿小视频咯!

本文转载自互联网,如有侵权,联系删除

相关推荐