package Ġcom . s uka idev . core . executor Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . util . Log Ċ import Ġkotlinx . coroutines . as Coroutine Dispatcher Ċ import Ġjava . util . concurrent . Array BlockingQueue Ċ import Ġjava . util . concurrent . ThreadPoolExecutor Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ Ċ /** Ċ Ġ* Ġ åħ¨å±Ģ çº¿ç¨ĭ æ±ł Ċ Ġ* Ġ ç»Łä¸Ģ App ä¸Ń Ok http ãĢģ åįı ç¨ĭ ä»¥åıĬ åħ¶ä»ĸ å¼ĤæŃ¥ ä»»åĬ¡ éĥ½ åºĶè¯¥ ä½¿çĶ¨ æŃ¤ çº¿ç¨ĭ æ±ł Ċ Ġ* Ġ@ author Ġs uka idev Ċ Ġ* Ġ@ since Ġ 2 0 2 1 / 0 9 / 2 0 Ċ Ġ*/ Ċ object ĠApp Executor Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" App Executor " ĊĊĠĠĠ Ġprivate Ġval Ġmain Handler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĊĠĠĠ Ġprivate Ġval Ġcores Ġ= Ġ 5 . coerce At Most ( Runtime . get Runtime (). available Processors ()) ĊĠĠĠ Ġprivate Ġval Ġmax PoolSize Ġ= Ġcores Ġ* Ġ 3 ĊĠĠĠ Ġprivate Ġconst Ġval Ġmax Queued Work Size Ġ= Ġ 2 0 0 0 ĊĠĠĠ Ġprivate Ġconst Ġval Ġmax KeepAlive Time Ġ= Ġ 1 0 L ĊĊĠĠĠ Ġprivate Ġval Ġthread Index Ġ= ĠAtomicInteger ( 0 ) ĊĊĠĠĠ Ġprivate Ġval Ġexecutor Ġ= ĊĠĠĠĠĠĠĠ ĠThreadPool Executor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcores , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax PoolSize , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax KeepAlive Time , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . SECONDS , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArray BlockingQueue ( max Queued Work Size ), Ġ{ Ġrunnable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread Group (" Default - Group "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunnable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Thread -${ thread Index . increment AndGet () }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġr , Ġexecutor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ"$ TAG ĠReject ed Execution , Ġ$ r , Ġ${ executor . task Count }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġval Ġcoroutine Dispatcher Ġ= Ġexecutor . as Coroutine Dispatcher () ĊĊĠĠĠ Ġfun Ġexecute ( run nable : ĠRunnable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecutor . execute ( run nable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpost To MainThread ( run nable : ĠRunnable ) Ġ= Ġmain Handler . post ( run nable ) ĊĊĠĠĠ Ġfun Ġpost At Front Of MainThread ( run nable : ĠRunnable ) Ġ= Ġmain Handler . post At Front Of Queue ( run nable ) ĊĊĠĠĠ Ġfun Ġget Global Executor () Ġ= Ġexecutor Ċ }