首 页 行业热点 新车 试驾评测 养车用车 车型库

浅谈launchMode与startActivityForResult()冲突

发布网友 发布时间:1小时前

我来回答

1个回答

热心网友 时间:1小时前

项目中遇到了一个困扰,某个页面调起扫码页面后返回数据,但用户反馈在部分手机上扫码成功后无法继续操作。在Android4.4系统上复现了这个问题,Logcat显示onActivityResult()方法提前执行,目标Activity还未finish就回调,导致拿不到数据。问题出现在目标Activity的launchMode设置为"singleTask"上。将目标Activity的launchMode改为"standard"或"singleTop",问题在Android4.4系统上得以解决。老版本Android系统(如4.x)在某些launchMode下,startActivityForResult()方法的数据传递存在问题。在5.0及以上版本,谷歌修复了这个问题。在实际应用中,使用LaunchMode时要谨慎考虑兼容性问题,不应盲目指定。


Activity的launchMode共有四种模式:


1. "standard",默认启动模式,每次创建新实例。


2. "singleTop",在每次有新的Intent时创建新实例,如果目标Activity已在堆栈顶部,则调用onNewIntent()接收新Intent。


3. "singleTask",允许其他Activity成为任务的一部分,始终位于任务顶部,但其他"standard"或"singleTop"Activity可以启动到任务中。


4. "singleInstance",任务中唯一Activity,启动另一个Activity时会被分配到其他任务。


在实际开发中需注意,使用launchMode时要考虑兼容性问题,并非所有模式都适用于所有版本的Android系统。


相关参考资料:



启动模式及其与Intent标志交互文档
解决singleTaskonActivityResult()无效的问题

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com