不知道大伙有没有发现,应用第一次启动的时候一般比较慢(低配置手机尤其如此),黑屏好一段时间,下面是我在模拟器中启动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. set集合玩法、三目运算

    set是无序的,无法用下标获取值 创建set二种方式 1.第一种 s1=set()   #创建一个空的set,看下面就知道为什么要这么创建一个空的集合 2.第二种 s2={11,22,33,44} # ...

  2. 关于python安全性的问题

    收集总结了一下python安全方面的知识点以及近年来的相关漏洞,如果有需要修正或补充的地方,欢迎各位师傅的指出. 常见web漏洞在python中的示例. xss python下的xss其原理跟php是 ...

  3. HDU 1213(并查集)

    How Many Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  4. 【BZOJ 2006】2006: [NOI2010]超级钢琴(RMQ+优先队列)

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2792  Solved: 1388 Description 小 ...

  5. [BZOJ5093]图的价值(NTT+第二类Stirling数)

    5093: [Lydsy1711月赛]图的价值 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 250  Solved: 130[Submit][Sta ...

  6. 【tarjan+拓扑】BZOJ3887-[Usaco2015 Jan]Grass Cownoisseur

    [题目大意] 给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过?(一个点在路径中无论出现多少正整数次对答案的贡献均为1) [思路] 首先 ...

  7. acdream 1735 输油管道 贪心

    输油管道 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1735 Description ...

  8. 2015 UESTC 搜索专题E题 吴队长征婚 爆搜

    吴队长征婚 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Descri ...

  9. C# MATLAB混合编程

    我附带把matlab配置过程也给大家上传上来.[转载]终于学会C#调用matlab函数了,原来这么简单(也可以下载附件查看)自己的配置: (1)Microsoft Visual Studio 2005 ...

  10. SSM+Maven(教程一):学习SSM框架的前提条件。

    准备工作 环境准备 1.配置jdk:http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html Intelij中配置JDK:File- ...