Android Starting Window
来源:互联网 发布:苹果 windows 截屏 编辑:程序博客网 时间:2024/06/05 17:23
原文地址:http://www.shaoqun.com/a/94550.aspx
当打开一个Activity时,如果这个Activity所属的应用还没有在运行,系统会为这个Activity所属的应用创建一个进程,但进程的创建与初始化都需要时间,在这个动作完成之前系统要做什么呢?如果没有任何反应的话,如果程序初始化的时间很长,用户可能还以为没有点到相应的位置。但此时所启动的程序还没初始化完,既无法显示程序,又不能停在原处不做任何动作,怎么办?这就有了Starting Window的概念,也可以称之为Preview Window。
Starting Window就是一个用于在应用程序进程创建并初始化成功前显示的临时窗口,拥有的Window Type是TYPEAPPLICATIONSTARTING。在程序初始化完成前显示这个窗口,以告知用户系统已经知道了他要打开这个应用并做出了响应,当程序初始化完成后显示用户UI并移除这个窗口。
这个Starting Window我们都见过,不过可能没留意过,其实就是开启程序时黑屏的那个窗口,够丑的。不过也没办法,每个程序的界面都不是同的,系统只有默认显示一个很简单的窗口了。
如果所谓的Starting Window只是一个黑屏的窗口的话,那这个功能未免也太鸡肋了。其实系统是可以根据每个程序的Theme显示不同的样子的。
启动应用的时候,虽然我们的程序还没初始化,但程序内的组件可是在程序安装的时候就被系统分析注册了的。我们可以针对每个Application和Activity设置不同的Theme,系统就是根据这个Theme初始化Starting Window的。Window布局的顶层是DecorView,Starting Window就是显示一个空的但是应用了Activity指定的Theme(如果Activity没有指定就用Application的)的DecorView。
在Theme中可以指定很多东西,如ActionBar的样式,窗口的背景,Activity的图标等,通过给Activity指定Theme,系统就可以在我们的应用初始化完成之前将这个Theme应用到Starting Window,这样看起来就像我们的应用已经启动起来了,只是数据内容还没有初始化好。
所以,如果你的Activity的背景只是简单的纯色的话,最好直接通过Theme把它应用到Activity的Background,而不是设置为顶层Layout的背景,如果真的需要给顶层Layout设置背景,也可以给android:windowBackground设置一个和Activity UI相似的背景,为了防止Overdraw,在Activity的onCreate中通过setWindowBackground()再把窗口的背景设置为null。
系统在显示Activity前显示一个Starting Window仅发生在需要为启动这个Activity创建进程时,一般情况下是一个应用的入口Activity(包含Lanuncher中显示的图标进入的Activity及被其他应用调用的Activity)。
还有一种情况就是应用内有多个进程的情况(通过android:process),比如你的程序需要用单独的进程查看图片,当从你的应用的主进程进入图片浏览的Activity时,系统就会创建图片浏览的进程,如果图片浏览的Activity的需要使用的图标和Application指定的图标不一样的话就要注意了,系统显示图片进程中的Activity的Starting Window时不会使用这个Activity在Manifest中通过android:icon指定的图标,而只会使用Theme中指定的图标,如果没为这个Activity指定一个Theme或所指定的Theme中没有指定android:icon的话,系统会使用Application标签指定的android:icon,结果就是会看到Starting Window中显示一个图标,当Activity加载完后图标会变为Activity在Manifest中指定的android:icon,有一个变化的过程。
更多介绍参考Android App Launching Made Gorgeous
- Android Starting Window
- Android Starting Window(Preview Window)
- Android应用启动界面分析(Starting Window)
- Activity starting window and how to speed up activity starting (Android 7.0)
- token failed creating starting window
- Android learning Starting!
- Android窗口管理服务WindowManagerService显示Activity组件的启动窗口(Starting Window)的过程分析
- Android窗口管理服务WindowManagerService显示Activity组件的启动窗口(Starting Window)的过程分析
- Android Permission Denial: starting Intent
- starting of process of android
- STARTING
- STARTING
- Starting
- starting?
- Starting
- Starting
- STarting
- 如何去掉activity启动时的启动窗口(starting window)?
- 如何加速./mk snod打包
- 遇到错误ERROR 1044 (42000): Access denied for user ''@'localhost'to database 'mysql',的解决办法
- 字符编码ASCII,Unicode和UTF-8
- AN button自定义样式 && AN selector和shape的使用
- HDU1020(字符串处理)
- Android Starting Window
- apache 使用心得(启动多实例,单实例监听多端口,单实例监听多域名)
- 关于IAAS
- 编译过程
- typedef-------typedef void (*sighandler_t)(int)的区别
- 详解@SessionAttributes
- gcc和g++
- js 鼠标移动更换表格背景行颜色的问题
- Java 集合框架