App启动的方式:
冷启动:指后台没有改应用的进程,重新创建进程,过程为,实例化Application
,然后实例化入口Activity
,最后显示Activity
.
热启动:后台中存在当前的进程,直接从进程中启动,不用重新创建Application
,只需要实例化入口Activity
即可
优化App启动过程的三个建议:
Application
的创建过程中尽量少的进行耗时操作- 如果用到
SharePreference
,尽量在异步线程中操作 - 减少布局的层次,并且生命周期回调的方法中尽量减少耗时的操作
第一种方法是Manifest
文件中给指定的入口Activity
设置一个背景,当进入之后恢复默认背景,这样在显示界面之前都会显示那么被设置的背景,这样就提高了用户体验,至少等待主界面的过程中不是黑屏或者白屏.
主题的设置
<style name="LauncherTheme">
<item name="android:windowBackground">@drawable/bg_login</item>
</style>
给Activity
设置主题
<activity
android:name=".activity.LauncherActivity"
android:theme="@style/LauncherTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
但是这种方法有一个
局限性
就是有些设备不支持手机欢迎界面铺满标题栏全屏,就会有一个logo从上到下瞬间跳变的效果
所以最后运用了郭神的方案:http://blog.youkuaiyun.com/sinyu890807/article/details/51019856
修改styles.xml中主题相关的代码,如下所示:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
......
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
</style>
其中我们加入了两个属性,windowIsTranslucent和windowNoTitle,将这两个属性都设置成true,就可以让程序在初始化的时候窗口是透明的,初始化结束后程序主界面才会显示出来,从而也就完全看不到白屏界面了。
使用这种方式,虽然白屏界面看不到了,但是由于初始化的过程中窗口是透明的,会让用户感觉程序启动的响应速度稍微慢了点,不过其实这种差别都是毫秒级的,就没必要再为这个担心了。
亲测可用,如果有更好的方案,欢迎留言