当前位置: 首页 > news >正文

我的Android启动优化—【黑白屏优化】

简述

在Android App使用过程中,对于应用的优化是一个加分项,举个例子,打开你的App需要2秒,人家0.5秒,这就是很大的用户体验上的优化。

问题的产生

在开发中,我们在启动app的时候,屏幕会出现一段时间的白屏或者黑屏,不同设备时间长短不同。很影响用户体验。 首先分析一下,产生这个现象的原因,当我们在启动一个应用时,系统会去检查是否已经存在这样一个进程,如果不存在,就是冷启动。系统和APP本身都有很多工作需要处理。首先系统的服务会先检查startActivity中的intent的信息,然后在去创建进程,最后才是执行启动Acitivy的操作。而我们上面提到的显示白黑屏的问题,就是在这段时间内产生的。

流程图解如下:

白屏黑屏解决方案

在自己的中加入windowsbackground,这样,在App启动的时候就会直接弹出设置的背景

设置windowbackground为透明的 true

前面两种方法都有一个问题,就是在所有Activity启动的时候都会先显示这个默认的图片,如果是透明的话会出现点了图标没反映的情况

单独制作一个主题

<style name="AppTheme.Launcher"><item name="android:windowBackground">@drawable/bg</item></style><style name="AppTheme.Launcher1"><item name="android:windowBackground">@drawable/bg</item></style><style name="AppTheme.Launcher2"><item name="android:windowBackground">@drawable/bg</item></style>

然后在Menifest中相应的Activity下设置

<activity android:theme="@style/AppTheme.Launcher"

然后在程序中使用

setTheme(R.style.AppTheme);

让APP中所有的activity还是使用以前的样式,这样做就只有启动时才使用自己的样式

介绍下qq中方式,在style中设置下面的属性

关闭预显示
<item name="android:windowDisablePreview">true</item> 
背景设置为空
<item name="android:windowBackground">@null</item>
1234

qq比较牛逼的一点是他在Application中不初始化任何的东西,将启动时间优化到极致,下面会讲到具体的方法

其实大多数应用不需要做到像qq那样启动速度快到极致,像腾讯系、阿里系的一些应用都是只显示一张图片,然后开始显示一个3秒左右的广告,在显示广告的时间里进行一些初始化

TRACE工具分析代码执行时间

黑白屏的优化只是表面上的优化,只是做到让用户觉得启动速度很快,但实际启动速度一点都没变,下面就该介绍真正的启动优化

工欲善其事,必先利器其器,google小姐已经为我们准备好了工具

Debug.startMethodTracing(filePath);
中间为需要统计执行时间的代码
Debug.stopMethodTracing();

或者直接使用Android Device file Explorer导出的文件

adb pull /storage/emulated/0/app1.trace把文件拉出来分析
把pull到电脑上的文件拖到AS中就可以分析了

查看页面启动时间

sdk版本4.4以前

通过命令

adb shell am start -W com.lqr.wechat/com.lqr.wechat.activity.SplashActivity

可以查看页面的启动时间

ThisTime:最后一个启动的Activity的启动耗时;
TotalTime:自己的所有Activity的启动耗时;
WaitTime: ActivityManagerService启动App的Activity时的总时间(包括当前Activity的onPause()和自己Activity的启动)。

AM.java在系统源码中的路径

frameworks\base\cmds\am\src\com\android\commands\am

在Android开发中还有许多要优化的东西,这篇主要理解了启动优化中的黑白屏优化。其主要为问题的产生及解决方案;更多有关Android优化的知识;可以参考《Android核心优化类目》里面记录了大部分的核心优化板块技术。

最后APP启动时间优化

优化方案:

1.开线程

内部没有创建handler 没有操作UI的事件 对异步要求不高

2.懒加载

用到的时候再初始化,如网络,数据库操作

http://www.lryc.cn/news/9564.html

相关文章:

  • TongWeb8编码设置说明
  • 不同相机之间图片像素对应关系求解(单应性矩阵求解)
  • 远程管理时代,还得是智能化PDU才靠得住!
  • 通俗易懂理解——布隆过滤器
  • TypeScript 学习之类型推导
  • Android四大组件——Service详解
  • svg转png
  • 教你如何搭建人事OA-员工管理系统,demo可分享
  • C++递推基础知识
  • 【Python入门第十天】Python 布尔
  • WebDAV之π-Disk派盘+Piktures
  • Revit问题:Navisworks中导入的rvt模型角度不正确调整
  • 最全正则验证
  • 阿里云服务器入门使用流程 新手学习教程
  • git学习
  • 新建一个完整的react项目和完善初始项目
  • HIVE 安装
  • jsp游泳馆门票管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • C++ ---智能指针详解
  • 企业带宽控制管理
  • MybatisPlus实现分页效果并解决错误:cant found IPage for args!
  • C语言赋值(关系)运算符和逗号运算符
  • 几种在Linux/window下查询外网IP的办法。
  • 【nodejs-05】黑马nodejs学习笔记05-数据库基本操作01
  • 零基础、学历无优势、逻辑能力一般”,能转行做程序员吗?
  • 第五章.与学习相关技巧—Batch Normalization
  • Zynq非Video Mixer方案实现视频叠加输出,无需SDK配置,提供工程源码和技术支持
  • 从零实现Web服务器(二): 线程池以及线程池的作用,Get和Post的区别,项目中如何编写数据库连接池,定时器优化非活跃连接
  • 为什么伟大的产品只专注做一件事
  • pycharm远程连接服务器,并单步调试服务器上的代码