package Ġjp . j ug g ler . sub way to oter čĊč Ċ import Ġandroid . app . Activity Manager č Ċ import Ġandroid . app . Application Exit Info č Ċ import Ġandroid . content . Context č Ċ import Ġandroid . os . Build č Ċ import Ġandroid . os . Bundle č Ċ import Ġandroid . view . View č Ċ import Ġandroid . view . ViewGroup č Ċ import Ġandroid . widget . Base Adapter č Ċ import Ġandroid . widget . ListView č Ċ import Ġandroid . widget . TextView č Ċ import Ġandroidx . annotation . Requires Api č Ċ import Ġandroidx . appcompat . app . AppCompatActivity č Ċ import Ġjp . j ug g ler . sub way to oter . api . entity . To ot Status č Ċ import Ġjp . j ug g ler . util . Log Category č Ċ import Ġjp . j ug g ler . util . decode UTF 8 č Ċ import Ġjp . j ug g ler . util . with Caption č Ċ import Ġorg . apache . commons . io . IO Utils č Ċ import Ġjava . io . ByteArray OutputStream č Ċ import Ġjava . io . InputStream čĊč Ċ @ Requires Api ( Build . VERSION _ CODES . R ) č Ċ class ĠAct Exit Re asons Ġ: ĠAppCompatActivity () Ġ{ čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠLog Category (" Act Exit Re asons ") čĊčĊĠĠĠĠĠĠĠ Ġfun Ġreason String ( v : ĠInt ) Ġ= Ġwhen Ġ( v ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Exit Info . REASON _ AN R Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" REASON _ AN R ĠApplication Ġprocess Ġwas Ġkilled Ġdue Ġto Ġbeing Ġun responsive Ġ( AN R )." čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Exit Info . REASON _ CR ASH Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" REASON _ CR ASH ĠApplication Ġprocess Ġdi ed Ġbecause Ġof Ġan Ġunhandled Ġexception Ġin ĠJava Ġcode ." čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Exit Info . REASON _ CR ASH _ NATIVE Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" REASON _ CR ASH _ NATIVE ĠApplication Ġprocess Ġdi ed Ġbecause Ġof Ġa Ġnative Ġcode Ġcrash ." čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Exit Info . REASON _ DEPEND ENCY _ DI ED Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" REASON _ DEPEND ENCY _ DI ED ĠApplication Ġprocess Ġwas Ġkilled Ġbecause Ġits Ġdependency Ġwas Ġgoing Ġaway , Ġfor Ġexample , Ġa Ġstable Ġcontent Ġprovider Ġconnection 's Ġclient Ġwill Ġbe Ġkilled Ġif Ġthe Ġprovider Ġis Ġkilled ." čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Exit Info . REASON _ EX CES SIVE _ RESOURCE _ USAGE Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" REASON _ EX CES SIVE _ RESOURCE _ USAGE ĠApplication Ġprocess Ġwas Ġkilled Ġby Ġthe Ġsystem Ġdue Ġto Ġexcess ive Ġresource Ġusage ." čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Exit Info . REASON _ EXIT _ SELF Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" REASON _ EXIT _ SELF ĠApplication Ġprocess Ġexit Ġnormally Ġby Ġitself , Ġfor Ġexample , Ġvia Ġjava . lang . System # exit ; ĠgetStatus Ġwill Ġspecify Ġthe Ġexit Ġcode ." čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Exit Info . REASON _ INITIAL IZATION _ FAILURE Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" REASON _ INITIAL IZATION _ FAILURE ĠApplication Ġprocess Ġwas Ġkilled Ġbecause Ġof Ġinitialization Ġfailure , Ġfor Ġexample , Ġit Ġtook Ġtoo Ġlong Ġto Ġattach Ġto Ġthe Ġsystem Ġduring Ġthe Ġstart , Ġor Ġthere Ġwas Ġan Ġerror Ġduring Ġinitialization ." čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Exit Info . REASON _ LOW _ MEMORY Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" REASON _ LOW _ MEMORY ĠApplication Ġprocess Ġwas Ġkilled Ġby Ġthe Ġsystem Ġlow Ġmemory Ġkill er , Ġmeaning Ġthe Ġsystem Ġwas Ġunder Ġmemory Ġpressure Ġat Ġthe Ġtime Ġof Ġkill ." čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Exit Info . REASON _ OTHER Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" REASON _ OTHER ĠApplication Ġprocess Ġwas Ġkilled Ġby Ġthe Ġsystem Ġfor Ġvarious Ġother Ġreasons Ġwhich Ġare Ġnot Ġby Ġproblems Ġin Ġapps Ġand Ġnot Ġaction able Ġby Ġapps , Ġfor Ġexample , Ġthe Ġsystem Ġjust Ġfinished Ġupdates ; ĠgetDescription Ġwill Ġspecify Ġthe Ġcause Ġgiven Ġby Ġthe Ġsystem ." čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Exit Info . REASON _ PERMISSION _ CHANGE Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" REASON _ PERMISSION _ CHANGE ĠApplication Ġprocess Ġwas Ġkilled Ġdue Ġto Ġa Ġruntime Ġpermission Ġchange ." čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Exit Info . REASON _ SIGNAL ED Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" REASON _ SIGNAL ED ĠApplication Ġprocess Ġdi ed Ġdue Ġto Ġthe Ġresult Ġof Ġan ĠOS Ġsignal ; Ġfor Ġexample , Ġandroid . system . Os Constants # SIG KILL ; ĠgetStatus Ġwill Ġspecify Ġthe Ġsignal Ġnumber ." čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Exit Info . REASON _ UNKNOWN Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" REASON _ UNKNOWN ĠApplication Ġprocess Ġdi ed Ġdue Ġto Ġunknown Ġreason ." čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Exit Info . REASON _ USER _ REQUEST ED Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" REASON _ USER _ REQUEST ED ĠApplication Ġprocess Ġwas Ġkilled Ġbecause Ġof Ġthe Ġuser Ġrequest , Ġfor Ġexample , Ġuser Ġclicked Ġthe Ġ\" Force Ġstop \" Ġbutton Ġof Ġthe Ġapplication Ġin Ġthe ĠSettings , Ġor Ġremoved Ġthe Ġapplication Ġaway Ġfrom ĠRecent s ." čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Exit Info . REASON _ USER _ STOP PED Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" REASON _ USER _ STOP PED ĠApplication Ġprocess Ġwas Ġkilled , Ġbecause Ġthe Ġuser Ġit Ġis Ġrunning Ġas Ġon Ġdevices Ġwith Ġmut lp le Ġusers , Ġwas Ġstopped ." čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"? ($ v )" čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġfun Ġread Stream ( in Stream : ĠInputStream ?) Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( in Stream ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ"( null )" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb ao Ġ= ĠByteArrayOutputStream () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIO Utils . copy ( in Stream , Ġb ao ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb ao . toByteArray (). decode UTF 8 () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . with Caption (" read Stream Ġfailed .") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Stream . close () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠlistView : ĠListView čĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠMy Adapter čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) čĊĠĠĠĠĠĠĠ ĠApp 1 . set Activity Theme ( this ) čĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . act _ exit _ re asons ) čĊĠĠĠĠĠĠĠ ĠApp 1 . init Edge To Edge ( this ) čĊčĊĠĠĠĠĠĠĠ Ġval Ġam Ġ= Ġget System Service ( Activity Manager :: class . java ) čĊĠĠĠĠĠĠĠ Ġif Ġ( am Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e (" can 't Ġfind ĠActivity Manager ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġthis . list View Ġ= ĠfindViewById ( R . id . list View ) čĊĠĠĠĠĠĠĠ Ġthis . adapter Ġ= ĠMy Adapter () čĊĠĠĠĠĠĠĠ Ġadapter . list Ġ= Ġam . get H istorical Process Exit Re asons ( null , Ġ 0 , Ġ 2 0 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () čĊčĊĠĠĠĠĠĠĠ ĠlistView . adapter Ġ= Ġadapter čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġclass ĠMy ViewHolder ( val Ġview Root : ĠView ) Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠtextView : ĠTextView Ġ= Ġview Root . findViewById ( R . id . textView ) čĊčĊĠĠĠĠĠĠĠ Ġfun Ġbind ( context : ĠContext , Ġinfo : ĠApplication Exit Info ) Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġ""" čĊĉĉĉ ĉ timestamp =${ To ot Status . format Time ( context , Ġinfo . timestamp , Ġb Allow Relative Ġ= Ġfalse )} čĊĉĉĉ ĉ import ance =${ info . import ance } čĊĉĉĉ ĉ p ss =${ info . p ss } čĊĉĉĉ ĉ rss =${ info . rss } čĊĉĉĉ ĉ reason =${ reason String ( info . reason )} čĊĉĉĉ ĉ status =${ info . status } čĊĉĉĉ ĉ description =${ info . description } čĊĉĉĉ ĉ trace =${ read Stream ( info . trace InputStream )} čĊĉĉ ĉ """. trim Indent () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġgen View ( parent : ĠViewGroup ?): ĠView Ġ= čĊĠĠĠĠĠĠĠ Ġlayout Inflater . inflate ( R . layout . lv _ exit _ reason , Ġparent , Ġfalse ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . tag Ġ= ĠMy ViewHolder ( it ) Ġ} čĊčĊĠĠĠ Ġinner Ġclass ĠMy Adapter Ġ: ĠBase Adapter () Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġvar Ġlist : ĠList < Application Exit Info > Ġ= Ġempty List () čĊčĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Count (): ĠInt Ġ= Ġlist . size čĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem ( position : ĠInt ): ĠAny Ġ= Ġlist [ position ] čĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget View ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt , čĊĠĠĠĠĠĠĠĠĠĠĠ ĠconvertView : ĠView ?, čĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠViewGroup ?, čĊĠĠĠĠĠĠĠ Ġ): ĠView Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( convert View Ġ?: Ġgen View ( parent )). also Ġ{ Ġview Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( view . tag Ġas ? ĠMy ViewHolder )?. bind ( this @ Act Exit Re asons , Ġlist [ position ]) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ } čĊ