启动方式
通常来说,启动方式分为两种:冷启动和热启动。
- 冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。
- 热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。
冷启动过程中的白屏黑屏
android studio升级 2.0之后 加上Instant Run,Instant Run为了能够让我们快速部署代码,背后其实是有一套非常复杂的逻辑的,比如要在APK中建立服务器与Android Studio进行通信,以及代码差异比对和替换等,在研发过程中可能出现白屏问题。
而Instant Run是用来提升开发效率的,也就是说,只有在开发阶段才会有Instant Run这个东西,在正式的产品中是完全不存在Instant Run的,如果我们打上签名,release版的程序是不会出现这种现象的。
尽管release版本没有Instant Run,也仍然会有短暂的白屏,这个就和Instant Run无关了,这是由于在启动的时候程序都要进行一些基本的初始化操作,所有程序都是要经历这个过程的。
如果不想看到白屏,我们可以在styles.xml中改下属性:
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
如此我们就不会遇见白屏了。
冷启动优化
冷启动时间是指当用户点击你的app那一刻到系统调用Activity.onCreate()之间的时间段。在这个时间段内,WindowManager会先加载app主题样式中的windowBackground做为app的预览元素,然后再真正去加载activity的layout布局。
就算没有白屏,要等一段时间才能进入Activity,所以我们可以对冷启动的时间做一下“手脚”,我们可制作一个启动Activity的背景样式的.9图片,然后把这个.9图片做为windowBackground。
- 为启动的Activity自定义一个Theme
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@drawable/image</item></style>
- 然后将新的Theme应用到设置到AndroidManifest.xml中
- 由于给MainActivity设置了一个新的Theme,这样做会覆盖原来的Theme,所以在MainActivity中需要设置回原来的Theme
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
结束语:本文仅用来学习记录,参考查阅。