11package org.ole.planet.myplanet.utilities
22
3+ import android.os.Handler
34import android.os.Looper
45import android.os.SystemClock
5- import kotlinx.coroutines.Dispatchers
6- import kotlinx.coroutines.launch
7- import org.ole.planet.myplanet.MainApplication
86
97class ANRWatchdog (private val timeout : Long = DEFAULT_ANR_TIMEOUT , private val listener : ANRListener ? = null ) {
108 companion object {
@@ -13,6 +11,9 @@ class ANRWatchdog(private val timeout: Long = DEFAULT_ANR_TIMEOUT, private val l
1311
1412 private var isWatching = false
1513 private var tick = 0L
14+ private val mainHandler = Handler (Looper .getMainLooper())
15+ private val tickUpdater = Runnable { updateTick() }
16+
1617
1718 private fun updateTick () {
1819 tick = SystemClock .elapsedRealtime()
@@ -29,7 +30,7 @@ class ANRWatchdog(private val timeout: Long = DEFAULT_ANR_TIMEOUT, private val l
2930
3031 isWatching = true
3132 tick = SystemClock .elapsedRealtime()
32- MainApplication .applicationScope.launch( Dispatchers . Main ) { updateTick() }
33+ mainHandler.post(tickUpdater)
3334
3435 Thread ({
3536 val threadName = Thread .currentThread().name
@@ -38,7 +39,7 @@ class ANRWatchdog(private val timeout: Long = DEFAULT_ANR_TIMEOUT, private val l
3839 while (isWatching) {
3940 val lastTick = tick
4041 val currentTime = SystemClock .elapsedRealtime()
41- MainApplication .applicationScope.launch( Dispatchers . Main ) { updateTick() }
42+ mainHandler.post(tickUpdater)
4243
4344 try {
4445 Thread .sleep(timeout / 2 )
@@ -68,12 +69,12 @@ class ANRWatchdog(private val timeout: Long = DEFAULT_ANR_TIMEOUT, private val l
6869 }
6970 }
7071 }
71-
7272 Thread .currentThread().name = threadName
7373 }, " ANRWatchdog" ).start()
7474 }
7575
7676 fun stop () {
7777 isWatching = false
78+ mainHandler.removeCallbacks(tickUpdater)
7879 }
7980}
0 commit comments