【Android】问题总结:在Activity的onCreate中直接跳转到其他Activity界面时,跳转动效异常

背景

当前应用在Appliacation启动时初始化三方SDK,在担任Launcher的Activity中动态获取权限,然后从Launcher中跳转到主界面时,弹出应用的隐私声明。
由于工信部近期的规定,要求三方SDK的初始化和获取权限需要在隐私声明之后,所以需要调整。

拟定的方案

在SplashActivity(AndroidManifest中配置的Launcher activity)中的onCreate中进行处理,如果没有之前没有同意过隐私声明(使用SP进行保存)则弹出隐私声明,待用户同意之后再请求权限,初始化SDK。

问题

方案很简单,编码完事儿之后,测试发现启动隐私声明的Activity的时候,SplashActivity(关闭的界面)在执行从右到左的退出动画,而隐私声明Activity启动无动画,导致界面短期内出现了重叠。

分析
  • 应该是Activity跳转动画问题
  • 可能与再onCreate中直接启动Activity也有关系,存在前一个Activity还在渲染准备显示的过程中,第二个Activity启动,导致前一个界面没有被完全覆盖。
解决方案
  1. 通过overridePendingTransition移除动画
  • 既然是动画问题,那么我们就直接把动画干掉就可以了吧。代码如下:
overridePendingTransition(0, 0);

测试发现没有效果,看了一下代码,原来是我之前的activity没有finish();

重点:overridePendingTransition使用的时候必须是startActivity()之前或者finish()之后

调整了之后发现有效果了,但是前一个Activity的界面没有显示,停留一段时间之后直接跳转到后一个Activity了,这样就导致应用启动的时候白屏的时间过长,从用户的角度考虑这样体验很差。这个解决方案被pass

  1. 添加延迟解决

分析中提到是直接在onCreate的时候启动的activity,所以相当于无法保证后一个Activity在第一个Activity完全显示之后创建,添加了一个1s的延迟,代码如下:

new Handler(Looper.getMainLooper()).postDelayed(() -> {
	Intent intent = new Intent(this, SecondActivity.class);
	startActivity(intent);
}, 1000);

测试发现问题解决 Oh yeah。

总结

这种问题只能提供一个思路,如果分析具体原因的话,就需要去看Activity启动的源码,很复杂。后续有时间的话,可以看一下这一块,但是简单想了一想这个应该还涉及到Activity相关的Window创建过程,还有多个Activity同时启动的考虑。先记录下来,后续有时间再说吧,哈哈,估计没时间细看了。

我是张诺然,一个心怀大海的程序员。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值