package Ġcom . sh en . de ssert _ task Ċ Ċ import Ġandroid . os . Looper Ċ import Ġandroid . os . Message Queue Ċ import Ġcom . sh en . de ssert _ task . annotation _ tools . Annotation Convert Tools Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġcreated Ġby Ġsh en Ġon Ġ 2 0 1 9 / 1 0 / 2 7 Ċ Ġ* Ġat Ġ 2 1 : 2 1 Ċ Ġ**/ Ċ class ĠDelay D ess ert Dispatcher Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdelay Tasks : ĠQueue < D ess ert Task > Ġby Ġlazy Ġ{ ĠLinkedList < D ess ert Task >() Ġ} ĊĊĠĠĠ Ġvar Ġinterface Create Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġidle Handler Ġ= ĠMessage Queue . Idle Handler Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( delay Tasks . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġdelay Tasks . poll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD ess ert Dispatch Runnable ( task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ! delay Tasks . isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Task ( task : ĠD ess ert Task ): ĠDelay D ess ert Dispatcher Ġ{ ĊĠĠĠĠĠĠĠ Ġdelay Tasks . add ( task ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > Ġcreate ( interface Obj Ġ: ĠClass < T >, Ġinterface Impl : ĠT ) Ġ= ĠAnnotation Convert Tools . instance ĊĠĠĠĠĠĠĠ Ġ. dispatcher ( this ) ĊĠĠĠĠĠĠĠ Ġ. create ( interface Obj , Ġinterface Impl ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . interface Create Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( interface Create ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnnotation Convert Tools . instance . auto Add ( delay Tasks . to Mutable List ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠL ooper . my Queue (). add Idle Handler ( idle Handler ) ĊĠĠĠ Ġ} Ċ }