转载androidapp应用启动分析与优化

wust小吴 wust小吴     2022-08-01     544

关键词:

前言:

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

<application
        android: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" //平板风格显示

干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!

2021androidapp开发工作必知必会之性能优化

AndroidApp启动优化全记录一、应用启动概述1、应用启动的一般流程应用的启动,从桌面点击应用图标到主界面用户可操作,大致遵循下面的流程:可以看到应用启动过程中,最重要的两个进程就是SystemServer和AppProce... 查看详情

androidapp性能优化——内存cpu耗电量启动时间指标获取(代码片段)

最近公司要求对App进行性能优化。考虑到既然是优化性能,那首先要获取App的相关性能指标,比如:内存占用、CPU利用率、App启动时间、App耗电量等情况,获取以上各指标后,才能针对性分析确定是否存在优化的可能。最近公司... 查看详情

2021androidapp开发工作必知必会之性能优化

AndroidApp启动优化全记录一、应用启动概述1、应用启动的一般流程应用的启动,从桌面点击应用图标到主界面用户可操作,大致遵循下面的流程:可以看到应用启动过程中,最重要的两个进程就是SystemServer和AppProce... 查看详情

androidapp启动时间优化

APP启动时间优化首先要知道入伙获取APP启动时间,可以看我的这篇文章:Android获取APP启动时间然后就是想办法降低启动时间1.在Application的onCreate方法中将耗时信息生成一个文件2.正常耗时文件需要申请读写权限3.运行APP&#x... 查看详情

androidapp启动优化

本篇文章已授权微信公众号AndroidChinaNet(Android开发中文站)独家发布在做食生活的项目时,曾遇到也启动页加载很慢,白屏。不知道是什么原因,后来换了一种思想,这个思想也用在了我的另一个项目里&#... 查看详情

androidapp的启动优化总结(代码片段)

工欲善其事必先利其器,最近在启动优化上踩了不少坑,写篇文章记录下,也给大伙避避坑,节省些时间。启动优化是什么,完全可以顾名思义,本文就不赘述了。至于为什么要做性能优化–QAQ,大家d... 查看详情

编写脚本统计androidapp冷启动时间(代码片段)

转载请标明出处:https://blog.csdn.net/xuehuayous/article/details/86236142;本文出自:【Kevin.zhou的博客】最近准备做下APP的性能优化,首先肯定是要全面了解下APP的性能状况,第一个想到的就是APP的启动速度。自家的和别人... 查看详情

android性能优化—布局优化技巧(代码片段)

...0c;Android内存泄漏和OOM分析(一)Android内存泄漏和OOM分析(二)Androidapp启动优化我们学习了如何通过合理管理内存,app的优化启动的方式来提升应用程序的性能。实际上界面布局也会对应用程序的性能产生比较大的影响,如果... 查看详情

androidapp性能优化之图片优化

本文转载自:http://blog.csdn.net/huang_rong12/article/details/51676125接下来说明一下关于其他内存问题。图片问题,作为一个优秀的Android开发者,在图片的类型选择,图片显示前的处理都是要好好考虑的,因为不同类型... 查看详情

androidapp启动时间测试方法总结

参考技术A查看当前界面Activity的方法:1)运行命令:adbshelldumpsyswindow|findstr"mCurrentFocus" mCurrentFocus=Window227cb04u0com.oppo.music/com.oppo.music.MainListActivity从结果中可知:当前应用包名:com.oppo.music当前界面Activity:com.oppo.music.M... 查看详情

由2.4s优化到1s以内:androidapp启动优化深度实践(代码片段)

优化性能一直是我们程序员的追求。在这个网络都追求5G了的时代,“卡”这个体验显然成为了一个极拉低印象分的问题,所以像阿里,还有腾讯、字节跳动、爱奇艺等,都非常重视这个问题,在面试中,... 查看详情

由2.4s优化到1s以内:androidapp启动优化深度实践(代码片段)

优化性能一直是我们程序员的追求。在这个网络都追求5G了的时代,“卡”这个体验显然成为了一个极拉低印象分的问题,所以像阿里,还有腾讯、字节跳动、爱奇艺等,都非常重视这个问题,在面试中,... 查看详情

creator3启动加载慢分析与解决

参考技术A这里主要是介绍分析Creator3.x的启动流程,以及如何可以优化加载时间.CocosCreator3.x上从应用启动到进入场景的可以分为以下几个阶段 查看详情

androidapp性能优化之内存优化

大家应该知道,我们编写的应用程序都是有一定内存限制的,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常。我们可以通过下面的代码看出每个应用程序最高可用内存是多少。ActivityManageractivityManager=(ActivityManager)... 查看详情

androidapp性能优化之内存优化

大家应该知道,我们编写的应用程序都是有一定内存限制的,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常。我们可以通过下面的代码看出每个应用程序最高可用内存是多少。ActivityManageractivityManager=(ActivityManager)... 查看详情

androidapp卡顿问题分析及解决方案

用户对卡顿的感知,主要来源于界面的刷新.而界面的性能主要是依赖于设备的UI渲染性能.如果我们的UI设计过于复杂,或是实现不够友好,计算绘制算法不够优化,设备又不给力,界面就会像卡住了一样,给用户卡顿的感觉.如果你... 查看详情

谱聚类算法(spectralclustering)优化与扩展(转载)

 谱聚类(SpectralClustering,SC)在前面的博文中已经详述,是一种基于图论的聚类方法,简单形象且理论基础充分,在社交网络中广泛应用。本文将讲述进一步扩展其应用场景:首先是User-Item协同聚类,即spectralco-clusterin... 查看详情

android性能优化实践与总结(包含启动,内存优化)(代码片段)

应用中性能优化实践与总结(精心总结)任何优化都需要进行检测,以数据说话,优化前和优化后有了怎样的提升[TOC]启动优化检测启动时间检测工具任选其一hugo插件,自己定义时间开始和结束手动计算时间.AOP工具AspectJadb的amstart命令... 查看详情