一切有为法如梦幻泡影,如露亦如电,应做如是观!
---佛说
1 开机启动流程
2 App启动方式 (冷/热/暖启动)
1> 冷启动:程序从头开始,系统没有为该程序创建进程,一般场景:程序安装后的第一次启动;应用程序被系统终止后再打开;
2> 热启动:此时程序依然驻留再内存中,只是被系统从后台带到前台,因此程序可以避免重复对象初始化,加载布局和渲染。需要注意的是,如果程序的某些内存被系统清除,比如调用onTrimMemory方法,则需要重新创建这些对象以响应热启动事件。
3>暖启动:它包含了热启动和冷启动一系列的操作子集,比热启动的消耗稍微多一点,它与热启动最大的区别在于,他必须通过调用onCreate方法重新开始创建活动,也可以从传递给onCreate方法中保存的实例状态中活得某些对象的恢复。
1>在App的启动流程中,当系统加载并启动APP时,需要耗费相应的时间,即使时间不到1S,用户也会感觉到当点击APP图标时会有延迟现象,为解决这一问题,Google的做法是在APP创建的过程中,先展示一个空白页面,让用户体验到点击图标之后立马有响应;而这个空白页面的颜色则是根据我们manifest文件中配置的主题背景颜色来决定的,默认是白色。(Google添加的这个空白页面是黑白屏产生的主要原因)
2>App从被系统调用,再到第一个页面渲染到手机屏幕上面,我们只需要关注Application方法里面的onCreate方法,以及第一个Activity的onCreate,onStart,onResume方法,如果在Appd启动第一个Activity时,该Activity不但有自己的逻辑,在在onCreate,onStart,onResume方法中直接跳转到了其他的Activity,那么跳转后的Activity的的这三个方法也需要优化。
总结:说白了App黑白屏的优化,1 Google添加的这个空白页面优化 2 Application onCreate方法优化,以及第一个Activity的onCreate,onStart,onResume方法优化,本节讲解Google添加的这个空白页面优化
解决方案1
AppTheme: (缺点会有短暂卡顿不被建议使用)
在应用默认的AppTheme中,设置系统“取消预览”(空白窗体)为true,或者设置空白窗体为透明,具体代码如下所示
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!--设置系统的取消预览(空白窗口)为true-->
<item name="android:windowDisablePreview">true</item>
<!--设置背景为透明-->
<item name="android:windowIsTranslucent">true</item>
</style>
解决方案2
1>自定义继承自AppTheme的主题
2>将启动Activity的theme设置为自定义的主题
3>在启动Activity的oncreate方法中,在super.onCreate()和setContentView方法之前调用setTheme方法,将主题设置为最初的AppTheme
<!--1自定义主题-->
<style name="AppTheme.StyleTheme">
<item name="android:windowBackground">@mipmap/ic_launcher</item>
</style>
<!--2设置启动Activity的主题-->
<activity
android:name=".DnakeActivity"
android:theme="@style/AppTheme.StyleTheme"
android:excludeFromRecents="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--3在代码中将主题设置回来也可以不设置回来根据需求而定-->
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.foat_windowone);
}