你所不知道的Andorid启动页(欢迎界面)

序言:今天老大让我去找UI要一张启动页的图,然后给项目加个启动页,放进去之后也没管那么多,后来运行项目的时候发现有点瑕疵,来看下图:

可能有人要问了,这不是挺好的一个欢迎界面吗?有啥问题,我相信看的仔细的看官会发现启动之后有一段时间是空白的,即使是很短,让人看着也不舒服,这时候可能又有人说了,那可能是你在application里面干了耗时的事才导致的,话说我一开始也是这样觉得的,然后我令写一个demo作测试,发现然而并不关你的application什么事儿,因为我都没有application,启动的时候依然有这样的问题,然后我就去对比我手机上腾讯公司和其他公司的产品,我发现他们的app大多是在你手指按下桌面图标的时候,先“静止”一段时间,然后再启动,而且中间一点白色的间隙也没有,这是什么鬼,带着疑惑,我去百度了一番,发现问题还真有:

后来我才之后,原来有冷热启动这一说:

1、冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。

特点:冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化application类,再创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。

2、热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。

特点:热启动因为会从已有的进程中来启动,所以热启动就不会走application这步了,而是直接走MainActivity(包括一系列的测量、布局、绘制),所以热启动的过程只需要创建和初始化一个MainActivity就行了,而不必创建和初始化application,因为一个应用从新进程的创建到进程的销毁,application只会初始化一次。

既然上述问题不是出在application,那么肯定就是在Activity了,我是这么想的,然后我就想着是不是SetContentView的时候花了很多时间呢?然后我又测试了一遍:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    long startTime = System.currentTimeMillis();
    setContentView(R.layout.activity_start);
    Log.d(TAG, "time===" + (System.currentTimeMillis() - startTime));
}

然后打印出来的时间是:

哈,果真是setContentView导致的,那就很好解决了,我们不要setContentView就好了,可能还有人要问了,你不要setContentView你咋加载布局呢?别急,别忘了还有theme这个好东西啊!我们可以定义一个theme,然后给theme设置背景就好了:

<style name="StartTheme" parent="AppTheme">
    <item name="android:windowBackground">@mipmap/icon_splash</item>
</style>

好了,大功告成,我们来看看效果:

注:setContentView的内部原理有兴趣的同学可以自己去百度看看,看看在哪里耗时了

这是我建的一个android小白的群,各位有兴趣的小白欢迎加群共同学习,也欢迎各位大神进群指导,共勉。群号:541144061

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值