基于安卓11的日常细节问题记录|【日常记录】startActivityForResult与singleInstance的冲突
脑洞现象基于Android11(API 30)
最近给自己定了个新方向kotlin安卓开发的学习,书籍这块必然是郭神的第三版第一行代码了,前面看的还挺快,毕竟干的是Java安卓开发,都是安卓大差不差嘛。当重温到启动模式的时候,上手敲了一下代码发现了个有趣的问题(可能还是太年轻这个问题竟然才遇到):
按照道理讲 singleInstance 这种启动模式是另起一个任务栈,并且包含 singleTask 的栈内唯一特性,不仅如此还得到了加强成为了全任务唯一,乍一看确实是那么回事,但是如果你的启动方式是startActivityForResult(启动一个singleInstance活动),那么实际效果就不是那样了。
MainActivity 代码示例
class MainActivity : AppCompatActivity() {private val tag = MainActivity::class.simpleNameprivate lateinit var binding: ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(tag, "task id is $taskId")
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.toastButton.setOnClickListener {
//val data = "https://www.it610.com/article/hello second activity!"
val intent = Intent(this, SecondActivity::class.java)
//intent.putExtra("extra_data", data)
startActivityForResult(intent, 1)
//startActivity(intent)
}
}override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
Log.d(tag, "return data is $resultCode")
}}
SecondActivity 代码示例
class SecondActivity : AppCompatActivity() {private val tag = SecondActivity::class.simpleNameprivate lateinit var binding: ActivitySecondBindingoverride fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(tag, "task id is $taskId")
binding = ActivitySecondBinding.inflate(layoutInflater)
setContentView(binding.root)
//val extraData = https://www.it610.com/article/intent.getStringExtra("extra_data")
//Log.d(tag, "MainActivity extra data is $extraData")
binding.finishButton.setOnClickListener {
val intent = Intent(this, ThirdActivity::class.java)
startActivity(intent)
}
}
}
ThirdActivity就是个空活动
androidmanifest.xml 配置文件示例局部 主活动启动模式默认也一样
2021-10-03 14:21:33.433 3738-3738/com.kotlin.firstapplication D/MainActivity: task id is 27
2021-10-03 14:21:40.430 3738-3738/com.kotlin.firstapplication D/SecondActivity: task id is 27
2021-10-03 14:21:42.208 3738-3738/com.kotlin.firstapplication D/ThirdActivity: task id is 28
2021-10-03 14:21:45.446 3738-3738/com.kotlin.firstapplication D/MainActivity: return data is 0
然后运行一看log,有意思的就来了,MainActivity和SecondActivity在一个活动栈里面!而我们什么都没设置的ThirdActivity确去了新的活动栈!
当然如果你启动活动用的是 startActivity 那么不会出现这个问题,但如果是startActivityForResult 的话那么各位道友就要注意了,目前的情况上看,这种有特定返回结果实现的方式,会影响原本设定的启动模式。
【基于安卓11的日常细节问题记录|【日常记录】startActivityForResult与singleInstance的冲突】PS:至于出现这种问题的具体逻辑根源,我还在看源码,众道友如果有比较深刻的理解,还望在评论区不吝赐教(抱拳)
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量