package Ġcn . com . las ong . z app Ċ Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os .* ĊĊ Ċ /** Ċ Ġ* ĠAuthor : Ġzh us ong Ċ Ġ* ĠEmail : Ġsong . zh u @ las ong . com . cn Ċ Ġ* ĠDate : Ġ 2 0 2 1 / 6 / 5 Ċ Ġ* ĠDescription : Ċ Ġ* Ġ æł¸å¿ĥ æľįåĬ¡ Ċ Ġ*/ Ċ Ċ class ĠCore Service Ġ: ĠService (), ĠHandler . Callback Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCommand Ġto Ġthe Ġservice Ġto Ġregister Ġa Ġclient , Ġreceiving Ġcallbacks ĊĠĠĠĠĠĠĠĠ Ġ* Ġfrom Ġthe Ġservice . Ġ ĠThe ĠMessage 's Ġreply To Ġfield Ġmust Ġbe Ġa ĠMess enger Ġof ĊĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġclient Ġwhere Ġcallbacks Ġshould Ġbe Ġsent . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMSG _ REGISTER _ CLIENT Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCommand Ġto Ġthe Ġservice Ġto Ġunregister Ġa Ġclient , Ġot Ġstop Ġreceiving Ġcallbacks ĊĠĠĠĠĠĠĠĠ Ġ* Ġfrom Ġthe Ġservice . Ġ ĠThe ĠMessage 's Ġreply To Ġfield Ġmust Ġbe Ġa ĠMess enger Ġof ĊĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġclient Ġas Ġpreviously Ġgiven Ġwith ĠMSG _ REGISTER _ CLIENT . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMSG _ UN REGISTER _ CLIENT Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åĽŀå¤į OK è¡¨ç¤º æĪĲåĬŁ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRES _ OK Ġ= Ġ" OK " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠKeep s Ġtrack Ġof Ġall Ġcurrent Ġregistered Ġclients . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġm Clients Ġ= ĠArrayList < Messenger >() ĊĊĠĠĠ Ġprivate Ġval Ġhandler Ġ= ĠHandler ( this ) ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTarget Ġwe Ġpublish Ġfor Ġclients Ġto Ġsend Ġmessages Ġto ĠIncoming Handler . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Messenger : ĠMess enger Ġ= ĠMess enger ( handler ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ( intent : ĠIntent ?): ĠI Binder ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Messenger . binder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġm Clients . clear () ĊĠĠĠĠĠĠĠ Ġhandler . remove Callbacks And Messages ( null ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĢļçŁ¥ å®¢æĪ·ç«¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġnotify Clients ( msg : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm Clients . indices . reversed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Clients [ i ]. send ( msg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRemoteException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġclient Ġis Ġdead . Ġ ĠRemove Ġit Ġfrom Ġthe Ġlist ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġare Ġgoing Ġthrough Ġthe Ġlist Ġfrom Ġback Ġto Ġfront ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġso Ġthis Ġis Ġsafe Ġto Ġdo Ġinside Ġthe Ġloop . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Clients . remove At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠĠ Ġ å®ŀéĻħ ä¸ļåĬ¡ åĬŁèĥ½ âĨ ĵ ĠĠ Ġ**/ ĊĠĠĠ Ġoverride Ġfun Ġhandle Message ( msg : ĠMessage ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( msg . what ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMSG _ REGISTER _ CLIENT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Clients . add ( msg . reply To ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreplay Msg Ġ= ĠMessage . obtain ( handler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreplay Msg . what Ġ= ĠMSG _ REGISTER _ CLIENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreplay Msg . obj Ġ= ĠRES _ OK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Clients ( replay Msg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMSG _ UN REGISTER _ CLIENT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreplay Msg Ġ= ĠMessage . obtain ( handler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreplay Msg . what Ġ= ĠMSG _ UN REGISTER _ CLIENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreplay Msg . obj Ġ= ĠRES _ OK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Clients ( replay Msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Clients . remove ( msg . reply To ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊ Ċ }