Android Activity 使用两次setContentView达到启动图的效果

最近在看xml解析时,发现phoneWindow内部setContentView函数会重新刷新整个Activity view树,既然这样,那么我们使用setContentView是不是就可以实现Splash的效果了,这样对整个Activity的生命周期会产生影响吗,带着问题我们进行了demo测试。

	@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        Log.d(LOG_NAME,"onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                setContentView(R.layout.activity_main);
            }
        },3000);
    }

注意:不能在onCreate中直接多次setContentView,这样会直接多次刷新整个Activity view树,人眼分辨出来就是最后一次的效果。通过Looper延时处理会更好一点,也不需要开新的子线程。
在这里插入图片描述
呈现的效果跟Splash一样,由于无需单独创建Activity,就整体性能而言是有一定优化的。
Activity生命周期
上图为对应Activity的生命周期状态,说明setContentView对Activity的生命周期是没有影响的,所以在使用的时候需要注意相关View的处理时间。对复杂的视图逻辑,也不建议这么创建Splash,会增加很多逻辑负担。合理的时候可以优化一些情况下的用户体验,当然使用单一视图的VISIBLE和GONE有时也可以达到相同效果。
推荐一篇相关的文章 Activity 与 Window 与 View 之间的关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值