Android App应用启动分析与优化

作者:lijiao 时间:2023-06-09 01:08:11 

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窗口背景。
 示例:

 Android App应用启动分析与优化

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>

解决后示例:

 Android App应用启动分析与优化

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" //平板风格显示
干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!

标签:android,app,启动优化
0
投稿

猜你喜欢

  • android TextView加下划线的方法

    2023-09-11 01:12:36
  • Android 优化之app启动优化的实现

    2023-10-11 07:31:22
  • java 中String.equals和==的比较

    2023-03-09 08:45:16
  • Android10开发者常见问题(小结)

    2023-05-08 10:27:24
  • ASP.NET MVC 5使用X.PagedList.Mvc进行分页教程(PagedList.Mvc)

    2023-09-23 08:02:41
  • Java注解详细介绍

    2021-10-09 19:52:28
  • Mybatis日志参数快速替换占位符工具的详细步骤

    2023-09-30 21:29:36
  • Android编程实现的首页左右滑动切换功能示例

    2022-10-15 07:20:17
  • C语言字符串大小比较

    2022-06-02 14:15:17
  • C#使用iTextSharp添加PDF水印

    2021-10-09 08:59:27
  • Java 栈和队列的相互转换详解

    2021-09-22 05:00:12
  • SpringBoot 项目的创建与启动步骤详解

    2022-01-23 16:51:17
  • 关于Java中修饰符的总结(fina除外)

    2023-11-22 23:15:57
  • Android 动画之RotateAnimation应用详解

    2022-08-17 17:03:07
  • 利用HorizontalScrollView实现滑动页面时的缩放效果

    2022-12-09 13:22:32
  • Android Dialog 动画实例详解

    2022-10-22 22:24:29
  • 深入了解java.util.Arrays的使用技巧

    2023-01-10 18:01:32
  • c# WPF中的TreeView使用详解

    2021-05-24 15:17:58
  • 解决dubbo错误ip及ip乱入问题的方法

    2023-08-06 17:18:02
  • 详解关于java文件下载文件名乱码问题解决方案

    2021-07-05 15:27:04
  • asp之家 软件编程 m.aspxhome.com