安卓Activity执行finish后onNewIntent也执行了

测试反应投屏时下一集可能播放不成功。

首先看一下日志:

onCompletion

onCast

handlerMessage: 2

finish: PlayerActivity@abc7fdc

onPause: PlayerActivity@abc7fdc

onNewIntent: PlayerActivity@abc7fdc

onResume: PlayerActivity@abc7fdc

onPause: PlayerActivity@abc7fdc

onResume: HomeActivity@71ec50a

onstop: PlayerActivity@abc7fdc

onDestroy:PlayerActivity@abc7fdc

看到日志时很迷惑,为什么 finish 了,安卓还会执行onNewIntent,不应该是新建一个 activity 吗?

先来看一下场景描述:

视频播完后会发送一个 finish 信息,如果 3s 内没有下一个视频进来就会执行 finish,有视频进来就会在 onNewIntent 中 remove 掉这条信息。

经过实验和详细分析后,终于找到了问题原因:

首先因为视频播放结束发了一条finish消息,finish消息没有执行时突然来了下一集的消息,这时候执行startActivty会插入一条onNewIntent消息。结果,这时候finish因为时间到了,该执行了。然后 finish 执行完后,onNewIntent 也该执行了。执行完后因为 finish 的原因, onDestroy也执行了。结果就是下一集没播完就退出来了。

解决办法:在startActivity前remove掉finish消息,比onNewIntent 的时间节点还要提前。

参考

面试必备:Android(9.0)Activity启动流程(一) : https://juejin.cn/post/6844903959581163528

面试必备:Android(9.0)Activity启动流程(二) : https://juejin.cn/post/6844903959589552142

android - onNewIntent called after finish() executed - Stack Overflow

相关推荐
大炮筒6 小时前
COCOS2DX4.0CPPWIN移植安卓踩坑总结
android
qq_422828628 小时前
android图形学之SurfaceControl和Surface的关系 五
android·开发语言·python
tongyiixiaohuang9 小时前
轻易云平台助力快麦数据入库MySQL
android·数据库·mysql
JohnnyDeng9412 小时前
Android 包体积优化:R8/ProGuard 深度配置
android
qq_4523962312 小时前
第六篇:《JMeter逻辑控制器:循环、条件和交替执行》
android·java·jmeter
cwzqf14 小时前
Jectpack Compose项目组件代码分享(1):分页加载组件
android
@北海怪兽14 小时前
SQL常见函数整理 _ STRING_AGG()
android·数据库·sql
鹏晨互联16 小时前
【Compose vs XML:边框内外间距的实现对比】
android·xml
Android系统攻城狮16 小时前
Android tinyalsa深度解析之pcm_plugin_write调用流程与实战(一百七十九)
android·pcm·tinyalsa·android16·音频进阶·android音频进阶
ID_1800790547316 小时前
除了JSON,淘宝店铺商品API接口还支持哪些数据格式?
android·数据库