Activity Result API 使用与源码分析,安卓移动开发实训报告

本文详细介绍了在Android移动开发中如何使用ActivityResult API,包括在其他类中接收Activity结果的步骤,以及源码层面的解析。文章涵盖了register、launch方法的实现,并探讨了结果回调的处理流程,帮助开发者深入理解这一关键功能。
摘要由CSDN通过智能技术生成
6.在其它类中接收Activity的结果

需要通过实现LifecycleObserver来实现协定的注册和启动器启动。

Activity注册这个观察者

var myLifecycleObserver=MyLifecycleObserver(registry = activityResultRegistry)

lifecycle.addObserver(myLifecycleObserver)

调用

myLifecycleObserver.selectImage()

实现DefaultLifecycleObserver,在onCreate注册协定

class MyLifecycleObserver(private val registry : ActivityResultRegistry) :DefaultLifecycleObserver{

lateinit var getContent : ActivityResultLauncher

override fun onCreate(owner: LifecycleOwner) {

getContent = registry.register(“key”, owner, ActivityResultContracts.GetContent(),

ActivityResultCallback { log(it) })

}

fun selectImage(){

getContent.launch(“image/*”)

}

}

二,源码


使用版本activity-ktx:1.2.2,fragment-ktx:1.3.3

1.register

registerForActivityResult方法最终会调用ActivityResultRegistryregister方法,通过不同的key生成一个唯一的requestCode,把这个requestCode保存下来,在结果返回时使用。通过Lifecycle添加一个观察者,监听Activity的ON_START,ON_STOP,ON_DESTROY事件。在ON_START事件到来时,会从mPendingResults这个bundle对象中通过key获取结果,如果有结果,则将结果回调到调用者处。ON_STOP事件则是移除这个key对应的CallbackAndContract对象,ON_DESTROY事件移除这个key对应的所有信息。最后返回ActivityResultLauncher对象给调用者使用。

public final <I, O> ActivityResultLauncher register(

@NonNull final String key,

@NonNull final LifecycleOwner lifecycleOwner,

@NonN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值