不知道大伙有没有发现,应用第一次启动的时候一般比较慢(低配置手机尤其如此),黑屏好一段时间,下面是我在模拟器中启动QQ的截图,黑屏差不多有5秒左右,如下图所示~



     显然这种结果很糟糕,用户体验非常差,那有没有什么办法解决此问题呢,有的人可能会说用splash screen,但这并不靠谱,也不是解决此问题的办法。

      我们都知道当退出一个应用时,应用的进程并不会被杀死,驻留在后台(有可能被系统杀死),以便下一次能够比较快速的启动应用。但应用第一次启动或者进程被杀死再次启动时其实需要做一系列的事情,首先得分配一个进程,然后在进程中实例化一个Dalvik VM
,接着虚拟机会初始化UI主线程。虽然Android使用Zygote
技术,
但做这些工作还是要花费一定的时间。Android为了能在这段时间内防止应用阻塞和尽快的响应用户,会显示一个临时“starting window”给用户,这个window什么事也不做,不能获取焦点也不能处理用户的触摸

     当你的应用进程初始化好了之后,系统会把这个临时的window移除掉,进而显示应用的窗口和视图。在这之前你的应用是没有运行任何代码的,现在就有一个问题了,系统是如何知道我们的应用要显示成什么样子的呢,是不是这个“starting window”永远都是固定的不可更改的呢,原来系统在加载应用的时候会读取在AndroidManifest.xml中指定的Theme(Application或Activity配置的Theme)来决定“starting window”的样式,如果未配置Theme的话,那么默认的Theme(@android:style/Theme或者@andriod:style/Theme.Holo.Light)会被
使用。

  经过上面的一些分析,我们只需变现自己的Theme并配置在Application或Activity上就可以改变默认的"starting window"的外观,让我们的应用之间的window切换更协调,下面是我写的一个Theme DEMO,并在Application节点上指定此Theme就行了

    <style name ="Theme.Starting.Window" parent= "@android:style/Theme.Holo.Light" >
<item name= "android:actionBarStyle">@style/StartingWindowActionBar</item >
</style > <style name ="StartingWindowActionBar" parent= "@android:style/Widget.Holo.Light.ActionBar" >
<item name ="android:background"> #2E495E</ item>
<item name= "android:titleTextStyle">@style/StartingWindowActionBar.Text </item >
</style > <style name ="StartingWindowActionBar.Text" parent= "@android:style/TextAppearance">
<item name ="android:textColor"> #FFA500</ item>
</style >






     前后两种结果对比可以看出,后者更美观,也更协调。其实Activity之间的切换也会使用到"starting window",只不过时间一般都很短暂,肉眼很难识别出,所以不用做相应的处理。











让Android App启动更协调的更多相关文章

  1. [FMX] Android APP 启动黑屏优化补丁

    使用说明 *************************************************** Android APP 启动黑屏优化补丁 作者: Swish, YangYxd 201 ...

  2. Android app启动activity并调用onCreate()方法时都默默地干了什么?

    Android app启动activity并调用onCreate() 方法时都默默地干了什么?   在AndroidManifest.xml文件中的<intent-filter>元素中有这 ...

  3. android app启动就闪退怎么办?

    开发过程中,如遇到android app启动就闪退,不要急,直接进入调试模式运行app,就会取得出错的原因. http://blog.sina.com.cn/s/blog_44fa172f0102wg ...

  4. Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法(转)

    转载: Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法   首先感谢博主分享,本文作为学习记录 惊鸿一瞥 微信的启动页,相信大家都不陌生. 不知道大家有没有发现一个现象 ...

  5. Android app启动耗时分析

    前言 app启动耗时过长的话,无论你的app里面的内容多么丰富有趣,作为一个用户,首先是没有耐心去等待的,如果我是一个用户,我会这样想:这是什么垃圾公司出的什么烂app,再等2s不进来就卸载,黑人问号 ...

  6. Visual Studio 2015开发Android App启动调试始终无法完成应用部署的解决方案

    创建一个Android App项目后,直接启动调试发现Visual Studio Emulator for Android已成功运行,但应用始终处于Build中(等待时间超过1小时),并未如预期通过a ...

  7. Android app启动是出现白屏或者黑屏如何解决?

    1.为什么 APP 启动时会出现白屏或者黑屏? 当打开一个 Activity 时,如果这个 Activity 所属的应用还没有在运行,系统会为这个 Activity 所属的应用创建一个进程,但进程的创 ...

  8. 033 Android App启动的闪屏效果+新手向导(多个图片滑动效果)+ViewPager使用

    1.目标效果 App启动时,出现闪屏效果(利用动画实现). App新手使用时,会出现新手向导效果. 2.XML页面布局 (1)闪屏页面 <?xml version="1.0" ...

  9. Android app启动出现白屏闪屏

    出现白屏闪屏原因: 进入到AppStartActivity,但是未加载到布局文件,就先显示了窗口的背景,白屏就是显示的windows的背景,即所设置的theme. onCreate()中的setCon ...

随机推荐

  1. 分割视图控制器(UISplitViewController)

    这种控制器只能用于iPad,它可以在iPad屏幕中显示两个不同的场景:在横向模式下,左边显示一个表,供用户选择:用户选择表中的元素后,详细视图将显示该元素的详细信息.如果iPad被旋转到纵向模式,表将 ...

  2. 获取token

    获取token 提示:openstack 这个是获取N版的方法 ,主要区别在于这个路径上(http://192.168.0.228:35357/v3/auth/tokens ),以前版本可能会是v2 ...

  3. FastReport.Net使用:[28]数据合并

    基础数据 1.拖动数据源中的数据列到报表设计器中,获得一张简单的报表. 2.下面使用两种方法将期中考试和期末考试的成绩合并到一行显示 合并数据(分组方法) 1.按学生名字和科目来进行分组,成绩文本框咱 ...

  4. Codeforces 622 F. The Sum of the k-th Powers

    \(>Codeforces \space 622\ F. The\ Sum\ of\ the\ k-th\ Powers<\) 题目大意 : 给出 \(n, k\),求 \(\sum_{i ...

  5. Android开发AlertDialog解析

    打开源码,首先映入眼帘的是三个构造方法,但这三个构造方法都是protected类型的, 可见,不允许我们直接实例化AlertDialog. 因此,我们再看别的有没有方法.可以实例化 再仔细一看,发现一 ...

  6. Miller-Rabin算法 codevs 1702 素数判定 2

    转载自:http://www.dxmtb.com/blog/miller-rabbin/ 普通的素数测试我们有O(√ n)的试除算法.事实上,我们有O(slog³n)的算法. 定理一:假如p是质数,且 ...

  7. BZOJ 3571 画框 KM算法 最小乘积最大权匹配

    题意 有n个画框和n幅画.若第i幅画和第j个画框配对,则有平凡度Aij和违和度Bij,一种配对方案的总体不和谐度为∑Aij*∑Bij.求通过搭配能得到的最小不和谐度是多少. n <= 70. 分 ...

  8. 实用小工具 -- 国家地区IP段范围查询工具

    如果想限制某个国家地区IP段访问,这几个查询工具就很有用了. 可以查询各个国家IP段范围,并且是持续更新的,使用方便. 当然,除此之外,你还可以通过APNIC.ARIN.RIPE这些官方IP分配机构查 ...

  9. javascritp 字符串截取

    1.substring 方法 定义和用法 substring 方法用于提取字符串中介于两个指定下标之间的字符. 语法 ? stringObject.substring(start,stop) 参数   ...

  10. CentOS 6.9/7通过yum安装指定版本的Node.js

    说明:通过yum好处其实很多,环境变量不用配置,配置文件放在大家都熟悉的地方,通过rpm -ql xxx可以知道全部文件的地方等等. Node.js(8.x) 一.安装和配置 1.安装Node.js ...