package Ġw ang . lifecycle . internal Ċ Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Event Observer Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . Lifecycle Registry Ċ import Ġw ang . lifecycle . EventDispatcher Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ internal Ġclass ĠBackground Lifecycle Bridge ( private Ġval Ġdispatcher : ĠInternal Dispatcher ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġs Background Lifecycle Registry Ġ= ĠConcurrent HashMap < Lifecycle Owner , ĠLifecycle Registry >() ĊĊĠĠĠ Ġfun Ġtry Attach Background Lifecycle ( owner : ĠLifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( s Background Lifecycle Registry [ owner ] Ġ!= Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s Background Lifecycle Registry [ owner ] Ġ!= Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs Background Lifecycle Registry [ owner ] Ġ= Ġattach ( owner ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Background Lifecycle ( owner : ĠLifecycle Owner ): ĠLifecycle Registry ? Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( Thread . currentThread () Ġ== Ġdispatcher . thread ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Calling Ġshould Ġon Ġ${ dispatcher . thread . name }, Ġcurrent Ġ${ Thread . currentThread (). name } ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġs Background Lifecycle Registry [ owner ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġattach ( owner : ĠLifecycle Owner ): ĠLifecycle Registry Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLifecycle Registry ( owner ). also Ġ{ Ġlifecycle Registry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInternal Reflect . close Check Man i Thread Of Lifecycle Registry ( lifecycle Registry ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrunnable Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( owner . detach If Destroy ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Runnable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlifecycle Event Observer Ġ= Ġobject Ġ: ĠLifecycle Event Observer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon StateChanged ( source : ĠLifecycle Owner , Ġevent : ĠLifecycle . Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Ġ== ĠLifecycle . Event . ON _ DESTROY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner . lifecycle . remove Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget State Ġ= Ġevent . target State ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmain Ġ-> Ġdispatcher ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher . dispatch ( object Ġ: Internal Runnable { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Registry . currentState Ġ= Ġtarget State ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( owner . detach If Destroy ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner . lifecycle . add Observer ( lifecycle Event Observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Internal Main Executor . on MainThread ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunnable . run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInternal Main Executor . execute ( run nable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠLifecycle Owner . detach If Destroy (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( lifecycle . currentState Ġ== ĠLifecycle . State . DESTROY ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs Background Lifecycle Registry . remove ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ }