Android -- 每日一问:Activity的启动模式(launchMode)有哪些,有什么区别?
Posted Kevin-Dev
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android -- 每日一问:Activity的启动模式(launchMode)有哪些,有什么区别?相关的知识,希望对你有一定的参考价值。
典型回答
使用场景
- 用户开始新的活动,并且希望得到新活动的某些信息。比如选择照片、选择联系人、选择收货地址、进行某块数据编辑工作等。
requestCode
-
解决的是「区分多个异步任务」的问题。与其他异步 API 的设计类似,如果没有这个信息,那么 Activity 在收到响应时会进入混乱的状态。比如他不知道自己得到的是选择照片还是选择联系人的结果。
-
该信息会发送到 AMS 那边的 ActivityRecord.requestCode 变量进行记录,Client 端新 Activity 并不知道这个信息。
-
为什么 requestCode < 0 时收不到结果?
-
ActivityStarter 收到 startActivityLocked 时,写入 ActivityRecord.resultTo 变量为空
if (requestCode >= 0 && !sourceRecord.finishing)
// 只有非负数时新的 ActivityRecord 对象的 resultTo 变量才指向发起者 ActivityRecord 对象
resultRecord = sourceRecord;
-
在 ActivityStack 收到 finishActivityResultsLocked 时,读取 ActivityRecord.resultTo 变量为空,结果数据不会添加到源 ActivityRecord.results 变量
-
在 ActivityStack 收到 resumeTopActivityInnerLocked 时,读取 ActivityRecord.results 数组为空,不会分发结果数据,这样源 Activity 也就没有结果回调了
resultCode
-
异步调用结果码,告诉调用者成功/失败/其它信息
-
该信息由被调用 Activity / framework 写入,并经过 AMS 传递给源 Activity。
你的朋友是不是也在准备面试呢?你可以“请朋友读”,把今天的题目分享给好友,或许你能帮到他。
以上是关于Android -- 每日一问:Activity的启动模式(launchMode)有哪些,有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章
Android -- 每日一问:Activity的启动模式(launchMode)有哪些,有什么区别?
Android -- 每日一问:Activity的启动模式(launchMode)有哪些,有什么区别?
Android -- 每日一问:自定义 View 的状态是如何保存的?