android - startActivityForResult 单个实例活动时的奇怪行为
问题描述
我在一个 android 应用程序中创建了三个活动:MainActivity
,SecondActivity
,ThirdActivity
并记录onCreate@taskId
这些活动的事件。
的启动模式SecondActivity
设置为singleInstance
。
然后我把两个按钮放进去MainActivity
。
按钮 1 startActivity(SecondActivity)
。
按钮 2 startActivityForResult(SecondActivity)
。
按钮 3 startActivity(ThirdActivity)
。
单击 button1 -> click button3 后,我得到以下日志,这与我预期的一样:
MainActivity onCreat@xxx0
SecondActivity onCreate@xxx1 // second activity is expected in a new task
ThirActivity onCreate@xxx0 // third
但是,单击按钮 2 -> 单击按钮 3:
MainActivity onCreat@xxx0
SecondActivity onCreate@xxx0 // it seems that startActivityForResult will make singleInstance activity not work
ThirdActivity onCreate@xxx1 // Here is the weird thing, the ThirdActivity is created on a new task!
有人可以解释一下吗?
这是用于复制的 repo singleInstanceTest 。
解决方案
文件说_
如果活动的实例已经存在于单独的任务中,系统将通过调用其 onNewIntent() 方法将意图路由到现有实例,而不是创建新实例。
我使用singleTask
启动模式的定义来解释该行为,因为它相同
当您单击
Button 1
它开始SecondActivity
并返回时(我假设您按下或调用)弹出finish
的实例SecondActivity
BackStack
当您单击不退出的
Button 2
实例时,将为SecondActivity
System
SecondActivity
要了解它,您应该尝试关注MainActivity
-> startActivityForResult(SecondActivity)
-> 在SecondActivity
开始时创建按钮ThirdActivity
-> 在ThirdActivity
创建按钮中并调用startActivityForResult(SecondActivity)
. 记录它以了解。
推荐阅读
- arrays - 在数组中查找中间数;我了解如何做到这一点,但无法使其发挥作用。:/(珊瑚)
- linux - Dockerfile 通过获取脚本以动态方式设置运行时 ENV
- sql - SQL Server 每组添加行号
- bash - 如何在 bash 文件中使用 cat 和 EOF
- asp.net-mvc - 新网站的 msbuild 参数失败
- node.js - NodeJS getaddrinfo ENOTFOUND 未捕获
- tomcat - Tomcat 管理器 - 活动目录身份验证
- c# - Powershell not invoking method in a c# object
- linux - 如何找到“mongod”命令的位置?
- java - 键盘覆盖 Android Studio 中的 Edittext