package Ġcom . par as . every Ċ Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Observer Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . On Lifecycle Event Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlin . system . measure Time Millis Ċ Ċ internal Ġclass ĠEvery ( ĊĠĠĠ Ġlifecycle Owner : ĠLifecycle Owner , ĊĠĠĠ Ġprivate Ġval Ġaction : Ġsuspend Ġ( Long ) Ġ-> ĠUnit , ĊĠĠĠ Ġprivate Ġval Ġsleep TimeIn Millis : ĠLong Ċ ) Ġ: ĠLifecycle Observer , ĠC ancellable Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġjob : ĠJob ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġelapsed Time : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Owner . lifecycle . add Observer ( this ) ĊĠĠĠĠĠĠĠ Ġjob Ġ= ĠCor outine Scope ( Dispatch ers . Main ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sleep TimeIn Millis Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ launch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Taken Ġ= Ġmeasure Time Millis Ġ{ Ġaction ( elapsed Time ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( sleep TimeIn Millis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelapsed Time Ġ+= Ġsleep TimeIn Millis Ġ+ Ġtime Taken ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ DESTROY ) ĊĠĠĠ Ġprivate Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġjob ?. cancel () ĊĠĠĠ Ġ} Ċ } Ċ