[置顶] 消灭黑白屏,实现android app“快速启动”
2016-09-28 18:00
891 查看
进行应用开发时,如果没有对app的启动页做处理,那我们的app冷启动时就会出现一个白屏或者黑屏的过程,正是这个黑白屏过程的存在会让用户感觉app启动速度慢,本篇博客中所说的“快速启动“”也正是针对这个过程进行优化以达到没有黑白屏的过程;
关于app的冷启动:
冷启动是指在进程未创建时,用户从launcher点击图标启动app的过程。在此过程中,系统需要为app创建一个进程,进程的创建和初始化是耗时的。
我们都知道activity的绘制也是需要时间的,所以android系统框架设计了一个叫做startWindow的窗口,在activity的window绘制完成之前,让startWindow显示在我们的手机屏幕上,直到activity准备完成再显示activity,前面说的黑白屏其实也就是我们app的SplashActivity绘制完成前的startWindow。
而startWindow的background与我们要启动的activity的主题中windowBackground是一样的,所以一切就变得很简单了:首先自定义theme,splashActivity一般也都是一张全屏显示的大图或者广告viewpager
另外加上将状态栏全透明化:
values-v21
values-v19
然后将自定义的主题应用给对应的activity就好了。
有一点需要注意:
如果加入上面一句代码将Window设置为了透明,在桌面点击启动图标时由于绘制的startWindow是全透明的,会导致表现出app启动之前会有一段等待时间,因此不建议设置为透明窗口
关于app的冷启动:
冷启动是指在进程未创建时,用户从launcher点击图标启动app的过程。在此过程中,系统需要为app创建一个进程,进程的创建和初始化是耗时的。
我们都知道activity的绘制也是需要时间的,所以android系统框架设计了一个叫做startWindow的窗口,在activity的window绘制完成之前,让startWindow显示在我们的手机屏幕上,直到activity准备完成再显示activity,前面说的黑白屏其实也就是我们app的SplashActivity绘制完成前的startWindow。
而startWindow的background与我们要启动的activity的主题中windowBackground是一样的,所以一切就变得很简单了:首先自定义theme,splashActivity一般也都是一张全屏显示的大图或者广告viewpager
<style name="splashTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowBackground">@drawable/splash01</item>//这里的图片设置为splashActivity全屏显示的第一张图片 <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style>
另外加上将状态栏全透明化:
values-v21
<style name="splashTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:windowBackground">@drawable/splash01</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@android:color/transparent</item>//状态栏颜色设置为透明 </style>
values-v19
<style name="splashTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:windowBackground">@drawable/splash01</item> <item name="android:windowTranslucentStatus">true</item>//透明状态栏 </style>
然后将自定义的主题应用给对应的activity就好了。
有一点需要注意:
<item name="android:windowIsTranslucent">true</item>//设置activity的window为透明窗口
如果加入上面一句代码将Window设置为了透明,在桌面点击启动图标时由于绘制的startWindow是全透明的,会导致表现出app启动之前会有一段等待时间,因此不建议设置为透明窗口
相关文章推荐
- android如何实现开机自动启动Service或app
- 【转】android如何实现开机自动启动Service或app
- android如何实现开机自动启动Service或app
- android如何实现开机自动启动Service或app
- android实现QQ游戏大厅一样的启动第三方APP
- android如何实现开机自动启动Service或app
- android如何实现开机自动启动Service或app(转)
- android如何实现开机自动启动Service或app
- android app如何做到快速启动
- android如何实现开机自动启动Service或app(转)
- android如何实现开机自动启动Service或app
- 【转】android如何实现开机自动启动Service或app
- [置顶] 在Android中使App快速、简单地支持新浪微博、微信、QQ、facebook等十几个主流社交平台的分享功能
- android如何实现开机自动启动Service或app
- android如何实现开机自动启动Service或app
- android如何实现开机自动启动Service或app
- android如何实现开机自动启动Service或app
- android如何实现开机自动启动Service或app
- android如何实现开机自动启动Service或app
- android app如何做到快速启动