當前位置:編程學習大全網 - 網站源碼 - 過時的OnActivityResult(二)

過時的OnActivityResult(二)

針對上篇《過時的OnActivityResult壹》,本篇進行源碼解析:

先來看壹下在Activity中啟動launcher之後是怎麽實現這種功能的

調用ComponentActivity中的registerForActivityResult,該方法返回壹個ActivityResultLauncher用於啟動Intent

由於沒有自定義ActivityResultRegistry,所以這裏使用的是ComponentActivity中的mActivityResultRegistry,調用了ActivityResultRegistry中的register

register則使用了lifecycleOwner實現了自動解綁功能,然後返回了壹個ActivityResultLauncher,並調用了invoke方法

這個時候回到ComponentActivity的mActivityResultRegistry看下源碼就知道是怎麽壹回事了,該方法先判斷了action是否為權限或者支付,最後調用的startActivityForResult

具體流程大概是這個樣子,再來看下是如何攔截onActivityResult的

ActivityResultRegistry攔截了onActivityResult,onRequestPermissionsResult同理,dispatchResult方法判斷了是否需要攔截,根據在調用register的時候保存的registerkey來判斷

然後拿出mKeyToCallback中保存對應requestCode的回調ActivityResultCallback,這個時候調用ActivityResultCallback的onActivityResult,這樣就能拿到對應的數據和狀態

fragment也是先拿到mActivityResultRegistry然後還是走的Activity流程

  • 上一篇:為什麽通達信電腦版黃金分割線顯示200%?
  • 下一篇:c形設計源代碼
  • copyright 2024編程學習大全網