package Ġtech . k etc . ank tf w . arch . lifecycle Ċ Ċ import Ġandroidx . lifecycle .* Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠA Ġinterface Ġthat Ġrun Ġarbitrary Ġfunction Ġwhen Ġ[ Lifecycle Owner ] Ġis ĠActive Ċ Ġ*/ Ċ interface ĠOn Active Runner Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġhandle ĠIf Ġthe Ġ[ handle ] Ġis Ġcalled Ġafter Ġ[ Lifecycle . Event . ON _ PAUSE ], Ġthe Ġ[ handle ] Ġis Ġcalled Ġon Ġ[ Lifecycle . Event . ON _ RE SU ME ] Ġis Ġcalled . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrun On Active ( handle : Ġ() Ġ-> ĠUnit ) Ċ } Ċ Ċ @ Suppress (" FunctionName ") Ċ fun ĠOn Active Runner ( owner : ĠLifecycle Owner ): ĠOn Active Runner Ġ= ĠOn Active Runner Impl ( owner ) Ċ Ċ private Ġclass ĠOn Active Runner Impl ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġowner : ĠLifecycle Owner Ċ ) Ġ: ĠOn Active Runner , ĠLifecycle Observer Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Is Safe Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Is Destroy Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġm Tasks Ġ= ĠLinkedList < () Ġ-> ĠUnit >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġowner . lifecycle . add Observer ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrun On Active ( handle : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Is Destroy ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( m Is Safe ) Ġhandle () ĊĠĠĠĠĠĠĠ Ġelse Ġm Tasks . add Last ( handle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ CREATE ) ĊĠĠĠ Ġfun ĠonCreate () Ġ= Ġrun All Tasks () ĊĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ PAUSE ) ĊĠĠĠ Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Is Safe Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ RE SU ME ) ĊĠĠĠ Ġfun Ġon Resume () Ġ= Ġrun All Tasks () ĊĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ DESTROY ) ĊĠĠĠ Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Is Destroy Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Tasks . clear () ĊĠĠĠĠĠĠĠ Ġowner . lifecycle . remove Observer ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun All Tasks () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Tasks . forEach Ġ{ Ġit () Ġ} ĊĠĠĠĠĠĠĠ Ġm Tasks . clear () ĊĠĠĠĠĠĠĠ Ġm Is Safe Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ