Android App应用启动分析与优化
前言:
昨晚新版本终于发布了,但是还是记得有测试反馈app启动好长时间也没进入app主页,所以今天准备加个班总结一下App启动那些事!
app的启动方式:
1.)冷启动
当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。
2.)热启动
当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。热启动因为会从已有的进程中来启动,所以热启动就不会走Application这步了,而是直接走MainActivity(包括一系列的测量、布局、绘制),所以热启动的过程只需要创建和初始化一个MainActivity就行了,而不必创建和初始化Application,因为一个应用从新进程的创建到进程的销毁,Application只会初始化一次。
app的启动流程:
通过上面的两种启动方式可以看出app启动流程为:
Application的构造器方法——>attachBaseContext()——>onCreate()——>Activity的构造方法——>onCreate()——>配置主题中背景等属性——>onStart()——>onResume()——>测量布局绘制显示在界面上
app的启动优化:
基于上面的启动流程我们尽量做到如下几点
Application
的创建过程中尽量少的进行耗时操作- 如果用到
SharePreference
,尽量在异步线程中操作 - 减少布局的层次,并且生命周期回调的方法中尽量减少耗时的操作
app启动遇见黑屏或者白屏问题
1.)产生原因
其实显示黑屏或者白屏实属正常,这是因为还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景。
示例:
2.)解决办法
通过设置设置Style
(1)设置背景图Theme
通过设置一张背景图。 当程序启动时,首先显示这张背景图,避免出现黑屏
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><item name="android:screenOrientation">portrait</item><item name="android:windowBackground">>@mipmap/splash</item><item name="android:windowIsTranslucent">true</item><item name="android:windowNoTitle">true</item> </style>
(2)设置透明Theme
通过把样式设置为透明,程序启动后不会黑屏而是整个透明了,等到界面初始化完才一次性显示出来
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><item name="android:windowNoTitle">true</item><item name="android:windowBackground">@android:color/transparent</item><item name="android:windowIsTranslucent">true</item><item name="android:screenOrientation">portrait</item></style>
两者对比:
- Theme1 程序启动快,界面先显示背景图,然后再刷新其他界面控件。给人刷新不同步感觉。
- Theme2 给人程序启动慢感觉,界面一次性刷出来,刷新同步。
(3)修改AndroidManifest.xml
<applicationandroid:name=".App"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"><activity android:name=".MainActivity"android:theme="@style/AppTheme"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>//......</application>
解决后示例:
3.)常见的Theme主题
android:theme="@android:style/Theme.Dialog" //Activity显示为对话框模式android:theme="@android:style/Theme.NoTitleBar" //不显示应用程序标题栏android:theme="@android:style/Theme.NoTitleBar.Fullscreen" //不显示应用程序标题栏,并全屏android:theme="Theme.Light " //背景为白色android:theme="Theme.Light.NoTitleBar" //白色背景并无标题栏android:theme="Theme.Light.NoTitleBar.Fullscreen" //白色背景,无标题栏,全屏android:theme="Theme.Black" //背景黑色android:theme="Theme.Black.NoTitleBar" //黑色背景并无标题栏android:theme="Theme.Black.NoTitleBar.Fullscreen" //黑色背景,无标题栏,全屏android:theme="Theme.Wallpaper" //用系统桌面为应用程序背景android:theme="Theme.Wallpaper.NoTitleBar" //用系统桌面为应用程序背景,且无标题栏android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" //用系统桌面为应用程序背景,无标题栏,全屏android:theme="Theme.Translucent" //透明背景android:theme="Theme.Translucent.NoTitleBar" //透明背景并无标题android:theme="Theme.Translucent.NoTitleBar.Fullscreen" //透明背景并无标题,全屏android:theme="Theme.Panel " //面板风格显示android:theme="Theme.Light.Panel" //平板风格显示
干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!
转自:http://www.codeceo.com/article/android-app-analysis-and-optimization.html
Android学习交流群:523487222
(如果您觉得有用,欢迎加入,一起学习进步)
点击链接加入群【Android学习群】
Android App应用启动分析与优化相关推荐
- 【转载】Android App应用启动分析与优化
前言: 昨晚新版本终于发布了,但是还是记得有测试反馈app启动好长时间也没进入app主页,所以今天准备加个班总结一下App启动那些事! app的启动方式: 1.)冷启动 当启动应用时,后台没有该应用 ...
- Android性能优化之App应用启动分析与优化
前言: 昨晚新版本终于发布了,但是还是记得有测试反馈app启动好长时间也没进入app主页,所以今天准备加个班总结一下App启动那些事! app的启动方式: 1.)冷启动 当启动应用时,后台没 ...
- Android 应用性能优化(4)---Android App性能评测分析-启动时间篇
Android App性能评测分析-启动时间篇 1.前言 随着项目版本的迭代,App的性能问题会逐渐暴露出来,而好的用户体验与性能表现紧密相关,性能问题从应用的启动优化开始,下面会根据实际app性能测 ...
- c++builder启动了怎么停止_App 竟然是这样跑起来的 —— Android App/Activity 启动流程分析...
在我的上一篇文章: AJie:按下电源键后竟然发生了这一幕 -- Android 系统启动流程分析zhuanlan.zhihu.com 我们分析了系统在开机以后的一系列行为,其中最后一阶段 AMS( ...
- Android App界面和流畅度优化
Android App界面和流畅度优化 所谓界面和流畅度优化,就是尽可能多地消除用户可直接感知的.影响用户操作体验的bug 1.人为在UI线程中做轻微耗时操作,导致UI线程卡顿 人为避免一切耗时操作 ...
- Android App性能评测分析
Android App性能评测分析-启动时间篇 Android App性能评测分析-网络流量篇 Android App性能评测分析-内存篇 Android App性能评测分析-cpu占用篇 Andro ...
- Android App加固原理分析
Android App加固原理分析 对App进行加固,可以有效防止移动应用被破解.盗版.二次打包.注入.反编译等,保障程序的安全性.稳定性.对于金融类App,尤其重要. 对App dex进行加固的基本 ...
- Android APP native 崩溃分析之 linker SIGBUS 崩溃
原文地址:https://caikelun.io/post/2019-05-31-android-app-native-crash-linker-sigbus/ 这是 Android APP nati ...
- android 恶意应用,对恶意Android应用Bangle Android App Packer的分析
原标题:对恶意Android应用Bangle Android App Packer的分析 写在前面的话 近日Trustlook Labs发现了一个恶意安卓应用程序,它使用社会工程手法诱骗用户安装.这个 ...
最新文章
- SLAM中的卡尔曼滤波:究竟滤了谁?
- python使用openCV加载图像、并将BGR格式转换成HSV格式、定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)、并使用mask信息进行颜色分离、BGR格式的图像转化为RGB、并可视化
- html研究中心,seo研究中心 教程:认识HTML、css的重要性-专业SEO技
- hibernate 一对一(One-to-One)
- Android开发笔记之:Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)
- php对象的三大特征,关于php中面向对象的三大特征(封装/继承/多态)
- ICCV 2017 《Illuminating Pedestriant via Simultaneous Detection Segmentation》论文笔记
- 开源特训营 - Lesson 6 - 如何提交一个合格的PR
- js判断字符串是否为空_每日一课 | Python 如何判断一个字符串是否包含另一个字符串?...
- Intel Core Enhanced Core架构/微架构/流水线 (15) - 先进智能缓存
- C++重载操作符详解
- FinNexus宣布已售出1000万枚FNX给相关投资者
- IIS无法启动——郁闷的KB939373补丁
- jqgrid for asp.net 遍历所有列rowObject时不用输入编号
- 各大linux发行版安装宝塔桌面脚本
- windows操作系统_windows下用深度系统安装器安装深度操作系统实现双系统分别运行...
- 深信服云终端aDesk_STD-200H、朵拉云云终端DC10 对比测试
- amaze ui 的使用
- java实训报告总结
- 定义电竞AI,引领数据体育-火星数据
热门文章
- 虚拟主机做游戏服务器,虚拟主机做游戏服务器
- python与金融工程的区别_科研进阶 | 纽约大学 | 金融工程、量化金融、商业分析:Python金融工程分析...
- 稍微挖掘一下思维导图XMind潜力以及那个使用XMind的你
- 施主,贫僧乃东土大唐而来,恳请在此借宿一晚……...
- STM32,点亮RGB灯,指南者,新手
- html5圆圈,javascript – 如何在HTML5画布中绘制带有文本的圆圈
- Linux top命令查看多核CPU每个核心的使用率
- 如何免费将PDF转成JPG
- OpenStack实例创建失败
- linux svn 查看忽略文件