发布网友 发布时间: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系统。
相关参考资料: