package Ġcom . example . reactiv ew ith lifecycle aware . presentation . main Ċ Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Observer Ċ import Ġandroidx . lifecycle . On Lifecycle Event Ċ Ċ interface ĠMain Lifecycle Aware Ġ: ĠLifecycle Observer Ġ{ ĊĠĠĠ Ġfun Ġregister Lifecycle ( lifecycle : ĠLifecycle ) ĊĠĠĠ Ġfun Ġadd Listener ( watcher : ĠWatch er ) ĊĊĠĠĠ Ġinterface ĠWatch er Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Resume () ĊĠĠĠĠĠĠĠ Ġfun Ġon Pause () ĊĠĠĠĠĠĠĠ Ġfun Ġon Destroy () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠMain Lifecycle Aware Impl Ġ: ĊĠĠĠ ĠMain Lifecycle Aware Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlifecycle : ĠLifecycle ĊĠĠĠ Ġprivate Ġval Ġwatch ers Ġ= Ġmutable ListOf < Main Lifecycle Aware . Watcher >() ĊĊĠĠĠ Ġoverride Ġfun Ġregister Lifecycle ( lifecycle : ĠLifecycle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . lifecycle Ġ= Ġlifecycle ĊĠĠĠĠĠĠĠ Ġif Ġ(! this :: lifecycle . isInitialized ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . lifecycle Ġ= Ġlifecycle ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . lifecycle Ġ!= Ġlifecycle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . lifecycle Ġ= Ġlifecycle ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . lifecycle . add Observer ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Listener ( watcher : ĠMain Lifecycle Aware . Watcher ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwatch ers . add ( watcher ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ PAUSE ) ĊĠĠĠ Ġfun Ġpause () Ġ= Ġwatch ers . forEach Ġ{ Ġit . on Pause () Ġ} ĊĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ RE SU ME ) ĊĠĠĠ Ġfun Ġresume () Ġ= Ġwatch ers . forEach Ġ{ Ġit . on Resume () Ġ} ĊĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ DESTROY ) ĊĠĠĠ Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġwatch ers . forEach Ġ{ Ġit . on Destroy () Ġ} ĊĠĠĠĠĠĠĠ Ġwatch ers . clear () ĊĠĠĠĠĠĠĠ Ġlifecycle . remove Observer ( this ) ĊĠĠĠ Ġ} Ċ }