前言:

昨晚新版本终于发布了,但是还是记得有测试反馈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的启动优化:

基于上面的启动流程我们尽量做到如下几点

  1. Application的创建过程中尽量少的进行耗时操作
  2. 如果用到SharePreference,尽量在异步线程中操作
  3. 减少布局的层次,并且生命周期回调的方法中尽量减少耗时的操作

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应用启动分析与优化相关推荐

  1. 【转载】Android App应用启动分析与优化

    前言: 昨晚新版本终于发布了,但是还是记得有测试反馈app启动好长时间也没进入app主页,所以今天准备加个班总结一下App启动那些事! app的启动方式: 1.)冷启动  当启动应用时,后台没有该应用 ...

  2. Android性能优化之App应用启动分析与优化

    前言: 昨晚新版本终于发布了,但是还是记得有测试反馈app启动好长时间也没进入app主页,所以今天准备加个班总结一下App启动那些事! app的启动方式: 1.)冷启动      当启动应用时,后台没 ...

  3. Android 应用性能优化(4)---Android App性能评测分析-启动时间篇

    Android App性能评测分析-启动时间篇 1.前言 随着项目版本的迭代,App的性能问题会逐渐暴露出来,而好的用户体验与性能表现紧密相关,性能问题从应用的启动优化开始,下面会根据实际app性能测 ...

  4. c++builder启动了怎么停止_App 竟然是这样跑起来的 —— Android App/Activity 启动流程分析...

    在我的上一篇文章: AJie:按下电源键后竟然发生了这一幕 -- Android 系统启动流程分析​zhuanlan.zhihu.com 我们分析了系统在开机以后的一系列行为,其中最后一阶段 AMS( ...

  5. Android App界面和流畅度优化

    Android App界面和流畅度优化 所谓界面和流畅度优化,就是尽可能多地消除用户可直接感知的.影响用户操作体验的bug 1.人为在UI线程中做轻微耗时操作,导致UI线程卡顿 人为避免一切耗时操作 ...

  6. Android App性能评测分析

    Android App性能评测分析-启动时间篇 Android App性能评测分析-网络流量篇 Android App性能评测分析-内存篇 Android App性能评测分析-cpu占用篇 Andro ...

  7. Android App加固原理分析

    Android App加固原理分析 对App进行加固,可以有效防止移动应用被破解.盗版.二次打包.注入.反编译等,保障程序的安全性.稳定性.对于金融类App,尤其重要. 对App dex进行加固的基本 ...

  8. Android APP native 崩溃分析之 linker SIGBUS 崩溃

    原文地址:https://caikelun.io/post/2019-05-31-android-app-native-crash-linker-sigbus/ 这是 Android APP nati ...

  9. android 恶意应用,对恶意Android应用Bangle Android App Packer的分析

    原标题:对恶意Android应用Bangle Android App Packer的分析 写在前面的话 近日Trustlook Labs发现了一个恶意安卓应用程序,它使用社会工程手法诱骗用户安装.这个 ...

最新文章

  1. SLAM中的卡尔曼滤波:究竟滤了谁?
  2. python使用openCV加载图像、并将BGR格式转换成HSV格式、定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)、并使用mask信息进行颜色分离、BGR格式的图像转化为RGB、并可视化
  3. html研究中心,seo研究中心 教程:认识HTML、css的重要性-专业SEO技
  4. hibernate 一对一(One-to-One)
  5. Android开发笔记之:Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)
  6. php对象的三大特征,关于php中面向对象的三大特征(封装/继承/多态)
  7. ICCV 2017 《Illuminating Pedestriant via Simultaneous Detection Segmentation》论文笔记
  8. 开源特训营 - Lesson 6 - 如何提交一个合格的PR
  9. js判断字符串是否为空_每日一课 | Python 如何判断一个字符串是否包含另一个字符串?...
  10. Intel Core Enhanced Core架构/微架构/流水线 (15) - 先进智能缓存
  11. C++重载操作符详解
  12. FinNexus宣布已售出1000万枚FNX给相关投资者
  13. IIS无法启动——郁闷的KB939373补丁
  14. jqgrid for asp.net 遍历所有列rowObject时不用输入编号
  15. 各大linux发行版安装宝塔桌面脚本
  16. windows操作系统_windows下用深度系统安装器安装深度操作系统实现双系统分别运行...
  17. 深信服云终端aDesk_STD-200H、朵拉云云终端DC10 对比测试
  18. amaze ui 的使用
  19. java实训报告总结
  20. 定义电竞AI,引领数据体育-火星数据

热门文章

  1. 虚拟主机做游戏服务器,虚拟主机做游戏服务器
  2. python与金融工程的区别_科研进阶 | 纽约大学 | 金融工程、量化金融、商业分析:Python金融工程分析...
  3. 稍微挖掘一下思维导图XMind潜力以及那个使用XMind的你
  4. 施主,贫僧乃东土大唐而来,恳请在此借宿一晚……...
  5. STM32,点亮RGB灯,指南者,新手
  6. html5圆圈,javascript – 如何在HTML5画布中绘制带有文本的圆圈
  7. Linux top命令查看多核CPU每个核心的使用率
  8. 如何免费将PDF转成JPG
  9. OpenStack实例创建失败
  10. linux svn 查看忽略文件