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

news2024/11/16 8:38:52

简述

在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.coloradmin.cn/o/349593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言之函数

函数不可嵌套定义&#xff0c;函数之间为平行关系#include<stdio.h> //比较大小 int max(int x,int y){int z;if(x>y){zx;}else{zy;}return z;//带返回值 }//不带参数 void help(void){printf("**********hello********\n"); }int main(){int num;nummax(3,…

Kubernetes集群编排工具helm3 工作学习记录

文章目录1. helm 介绍、组件、安装和目录结构1.1 helm 介绍1.2 helm 组件1.2.1 helm2 和 helm3 的区别1.3 helm 安装1.4 helm 目录结构2. 编写一个chart 和 helm3 内置对象讲解2.1 创建编写一个chart2.1.1 创建chart,引用内置对象的变量值2.1.2 helm通过各种类型chart包安装一个…

微信上线外卖小程序“门店快送”

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 抖音入局外卖&#xff0c;微信都开始下场做外卖了&#xff0c;难道都知道这块儿特赚钱吗&#xff0c;只能说如今大环境还是不太好&#xff0c;南山必胜客都开始搞兼职了…… 2月15日&#xff0c;有…

【管理您的整个软件供应链】上海道宁与​Sonatype助力您以更安全的开源更快地交付产品

Sonatype是 美国一家开源DevOps服务供应商 支持开源组件&#xff08;中央仓&#xff09; 为开发者提供资源库管理器&#xff08;Nexus&#xff09; 帮助加速软件创新 配备Nexus产品的组织 可以做出更好的决策 更快地进行大规模创新 并且知道他们的应用程序 始终由最高质…

微电影的行业痛点有哪些?

微电影全称微型电影&#xff0c;又称微影。是指能够通过互联网新媒体平台传播&#xff08;几分钟到60分钟不等&#xff09;的影片&#xff0c;适合在移动状态、短时休闲状态下观看&#xff0c;具有完整故事情节的“微(超短)时”(几分钟-60分钟)放映、“微(超短)周期制作(7-15天…

iOS开发framework和demo 使用cocoapod方法集成三方库

使用workspace。workspace相当于项目管理&#xff0c;创建workspace形成的文件是.xcworkspace。使用 一、xcode创建workspace并放入SDKFramework文件夹内&#xff0c;如图 选择File → new→Workspace → 点击save 这时候文件夹中就多了 SDKFramework.xcworkspace 文件 1-4.p…

功率放大器在MEMS微结构模态测试研究中的应用

实验名称&#xff1a;功率放大器在MEMS微结构模态测试研究中的应用研究方向&#xff1a;元器件测试测试目的&#xff1a;随着MEMS器件在各个领域中广泛应用&#xff0c;对微结构进行模态测试获得其动态特性参数对微结构的设计、仿真、制造、以及质量控制和评价等方面具有十分重…

机器学习:self-attention

输入 编码方式&#xff1a; one-hot:word-embedding:能更明显的区分不同类别的输入 图也能看作是多个向量输入 输出 每个向量都有一个label 一整个sequence有一个label 模型自己决定有多少个label&#xff08;sequence to sequence&#xff09; 重点介绍每个vector有一个…

Qt编写视频监控系统71-外网访问摄像头等设备(获取各种信息及拉流)

一、前言 最近遇到个需求是通过外网接入摄像机或者NVR&#xff0c;通用的做法是将视频流推流到服务器&#xff0c;然后拉取rtmp视频流&#xff0c;这样就多了服务器的要求&#xff0c;而且实现的功能有限比如不能直接用onvif协议对设备获取信息和配置信息&#xff0c;还有个做…

Guitar Pro8.0吉他打谱作曲中文版有哪些新功能?

很多人在听到Guitar Pro这个名词时&#xff0c;本能反应就是跟吉他有关的软件吧&#xff0c;但是具体是什么样子&#xff0c;有什么功能我们却不一定知道的那么详细&#xff0c;下面呢&#xff0c;我们就来详细的介绍下Guitar Pro这款软件。最后&#xff0c;Guitar Pro绝对是初…

【JAVA八股文】并发相关

并发相关1. 线程状态2. 线程池3. wait vs sleep4. lock vs synchronized5. volatile6. 悲观锁 vs 乐观锁7. Hashtable vs ConcurrentHashMap8. ThreadLocal1. 线程状态 六种状态及转换 分别是 新建 当一个线程对象被创建&#xff0c;但还未调用 start 方法时处于新建状态此时…

20- Xgboost 算法参数最优化 (集成算法) (算法)

Xgboost 方式一 from xgboost import XGBClassifier model XGBClassifier(learning_rate 0.1, # 学习率&#xff0c;控制每次迭代更新权重时的步长&#xff0c;默认0.3。值越小&#xff0c;训练越慢use_label_encoderFalse,n_estimators10, # 总共迭代的次数&#xff0c;即…

英特尔研究院探索负责任的生成式AI,让AI应用真正惠及大众

ChatGPT的爆火让AI再次成为大众热议的焦点&#xff0c;作为英特尔所提出的搭建起从模拟时代到数字时代桥梁的五大“超级技术力量”之一&#xff0c;伴随着无处不在的智能化&#xff0c;AI可将无穷的数据转化为切实可行的洞察。作为半导体行业的领先企业&#xff0c;在这一前沿技…

Windows系统从权限维持角度进行应急响应

一、基本介绍 红队攻击者在对目标进行渗透利用后通常都会进行权限维持&#xff0c;以达到持续利用的目的。而作为防守方进行应急响应时&#xff0c;应该如何与技术高超&#xff08;jiaohuajianzha&#xff09;的攻击者斗智斗勇呢&#xff1f;或许可以通过本文可以找到答案。以…

企业小程序开发步骤【教你创建小程序】

随着移动互联网的兴起&#xff0c;微信已经成为了很多企业和商家必备的平台&#xff0c;而其中&#xff0c;微信小程序是一个非常重要的工具。本文将为大家介绍小程序开发步骤&#xff0c;教你创建小程序。 步骤一、注册小程序账号 先准备一个小程序账号&#xff0c;在微信公…

ROS从入门到精通5-5:局部路径规划插件开发案例(以DWA算法为例)

目录0 专栏介绍1 局部规划插件制作框架2 DWA算法源码分析2.1 全局路径裁剪2.2 更新局部代价2.3 运行DWA算法2.3.1 构造动态窗口2.3.2 生成最优轨迹2.4 终点规划3 算法测试0 专栏介绍 本专栏旨在通过对ROS的系统学习&#xff0c;掌握ROS底层基本分布式原理&#xff0c;并具有机…

区块链知识系列 - 系统学习EVM(四)-zkEVM

区块链知识系列 - 系统学习EVM(一) 区块链知识系列 - 系统学习EVM(二) 区块链知识系列 - 系统学习EVM(三) 今天我们来聊聊 zkEVM、EVM 兼容性 和 Rollup 是什么&#xff1f; 1. 什么是 Rollup rollup顾名思义&#xff0c;就是把一堆交易卷&#xff08;rollup&#xff09;起来…

oracle官方下载历史版本JDK版本

背景 日常工作中由于一些特殊原因&#xff0c;我们需要下载指定系统指定位数指定版本的jdk&#xff0c;这个时候去网上搜索下载就会遇到各种坑&#xff0c;病毒、诱导连接、诱导关注/注册、付费、错误版本等&#xff0c;所以最好的办法是去官网下载&#xff0c;下面列举两种方式…

Allegro中如何删除多余D码操作指导

Allegro中如何删除多余D码操作指导 用Allegro做PCB设计的时候,在最后输出生产文件的时候,必须清除多余的D码,不让多余的D码出现在D码文件中,类似下图 如何清除多余D码,具体操作如下 点击Tools点击Padstack

WIN11/win10+Azure Kinect DK详细驱动配置教程(亲测)

本人3000多大洋 买了一台 Azure Kinect DK设备&#xff0c;打算研究研究人体姿态。今天配置一下&#xff0c;网上的教程不少&#xff0c;有的过期教程&#xff0c;有的和我的不匹配&#xff0c;所以,只能参考他们的&#xff0c;取其精华 去其糟粕。下面 开始&#xff0c;这里先…