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)有哪些,有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

每日一问之activity的进出动画

Android -- 每日一问:Activity的启动模式(launchMode)有哪些,有什么区别?

Android -- 每日一问:Activity的启动模式(launchMode)有哪些,有什么区别?

Android -- 每日一问:自定义 View 的状态是如何保存的?

Android -- 每日一问:两个 Fragment 之间如何进行通信 ?

Android -- 每日一问:如何理解 Android 中的 Context,它有什么用?