package Ġcom . example . android . architecture . blueprint s . todo app . util Ċ Ċ import Ġandroidx . test . espress o . id ling . Count ing Id ling Resource Ċ Ċ // Esp ress o Ġid ling Ġresources Ġact Ġas Ġa Ġsynchronization Ġmechanism Ġfor ĠE sp ress o Ġtests Ġand Ġyour Ġlong Ġrunning Ġoperations Ċ // You 'll Ġmake Ġtwo Ġtypes Ġof ĠE sp ress o Ġid ling Ġresources , ĠCount ing Id ling Resource Ġand ĠD atab ind ing Id ling Resource Ċ // Count ing Id ling Resource Ġmakes ĠE sp ress o Ġwait Ġduring Ġlong - running Ġtasks Ġinvol ving Ġthe Ġnetwork Ġand Ġdatabase Ġoperations Ċ // D atab ind ing Id ling Resource Ġhelps ĠE sp ress o Ġstay Ġin - sync Ġwith Ġdatab ind ing Ġand Ġviews , Ġyou 'll Ġmake Ġthis Ġin Ġthe Ġandroid Test Ġsource Ġset Ġand Ġnot Ġhere Ċ Ċ // kotlin 's Ġobject Ġkeyword Ġto Ġmake Ġa Ġsingleton Ġclass , Ċ object ĠE sp ress o Id ling Resource Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠRESOURCE Ġ= Ġ" GLOBAL " ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġcounting Id ling Resource Ġ= ĠCount ing Id ling Resource ( RESOURCE ) ĊĊĠĠĠ Ġfun Ġincrement () Ġ{ Ġ// provide Ġaccess Ġto Ġthe Ġoutside Ġworld Ġ( i . e . Ġother Ġclasses ) Ġto Ġthe ĠCount ing Id ling Resource Ġ Ġincrement Ġmethod ĊĠĠĠĠĠĠĠ Ġcounting Id ling Resource . increment () Ġ// when Ġcounter Ġis Ġgreater Ġthan Ġzero , Ġapp Ġis Ġconsidered Ġrunning Ġand Ġis Ġdoing Ġsome Ġwork ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdecrement () Ġ{ Ġ// provide Ġaccess Ġto Ġthe Ġoutside Ġworld Ġ( i . e . Ġother Ġclasses ) Ġto Ġthe ĠCount ing Id ling Resource Ġdecrement Ġmethod ĊĠĠĠĠĠĠĠ Ġif Ġ(! count ing Id ling Resource . is Idle Now ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounting Id ling Resource . decrement () Ġ// when Ġcounter Ġis Ġless Ġthan Ġzero , Ġapp Ġis Ġconsidered Ġidle ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // this Ġinline Ġfunction Ġhelps Ġreduce Ġboilerplate Ġcode Ġby Ġconstant ly Ġcalling Ġincrement Ġ& Ġdecrement , Ġinstead , Ġyou Ġjust Ġwrap Ġyour Ġlong - running Ġmethods Ġin ĠDefault Tasks Repository Ġwith Ġa Ġwrap Esp ress o Id ling Resource {} Ċ inline Ġfun Ġ< T > Ġwrap Esp ress o Id ling Resource ( function : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠ Ġ// ĠE sp ress o Ġdoes Ġnot Ġwork Ġwell Ġwith Ġcor outines Ġyet . ĠSee ĊĠĠĠ Ġ// Ġhttps :// github . com / Kotlin / kotlin x . coroutines / issues / 9 8 2 ĊĠĠĠ ĠE sp ress o Id ling Resource . increment () Ġ// ĠSet Ġapp Ġas Ġbusy . ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġfunction () ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ ĠE sp ress o Id ling Resource . decrement () Ġ// ĠSet Ġapp Ġas Ġidle . ĊĠĠĠ Ġ} Ċ }