Я использую coroutinue в CoroutinueScope в контексте Dispatchers.Default.
Иногда возникает ошибка ANR, когда не отвечает долгое время (SEC 5). Как избежать этого случая.
Функция requestWait ждет бесконечное время, я не изменяю эту функцию, потому что это нативный метод в Android. И API моего устройства 21 уровня, очень грустный.
connection: UsbDeviceConnection = null
private fun workerTask(usbSerialDevice: UsbSerialDevice) = CoroutineScope(Dispatchers.Default).launch {
while (isActive) {
val request = connection.requestWait()
if (request != null && request.endpoint.type == UsbConstants.USB_ENDPOINT_XFER_BULK
&& request.endpoint.direction == UsbConstants.USB_DIR_IN) {
var data = serialBuffer!!.dataReceived
ANR Log
"DefaultDispatcher-worker-2" daemon prio=5 tid=12 SUSPENDED
| group="main" sCount=1 dsCount=0 obj=0x4233f510 self=0x6aa10cd0
| sysTid=3412 nice=0 sched=0/0 cgrp=apps handle=1788940584
| state=S schedstat=( 0 0 0 ) utm=102 stm=51 core=3
#00 pc 00021910 /system/lib/libc.so (__futex_syscall3+8)
#01 pc 0000ef94 /system/lib/libc.so (__pthread_cond_timedwait_relative+48)
#02 pc 0000eff4 /system/lib/libc.so (__pthread_cond_timedwait+64)
#03 pc 00053553 /system/lib/libdvm.so
#04 pc 00053b19 /system/lib/libdvm.so (dvmChangeStatus(Thread*, ThreadStatus)+34)
#05 pc 0004dffb /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+406)
#06 pc 00000214 /dev/ashmem/dalvik-jit-code-cache (deleted)
at android.hardware.usb.UsbDeviceConnection.native_request_wait(Native Method)
at android.hardware.usb.UsbDeviceConnection.requestWait(UsbDeviceConnection.java:209)
at com.kisane.display.smartdisplay.serial.usbserial.UsbSerialDevice$workerTask$1.invokeSuspend(UsbSerialDevice.kt:60)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask$DefaultImpls.run(Dispatched.kt:235)
at kotlinx.coroutines.DispatchedContinuation.run(Dispatched.kt:81)
at kotlinx.coroutines.scheduling.Task.run(Tasks.kt:94)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:586)
at kotlinx.coroutines.scheduling.CoroutineScheduler.access$runSafely(CoroutineScheduler.kt:60)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:732)
Выше кода мой источник. Произошла ошибка ANR в CoroutineScope (Dispatchers.Default) .launch. Как избежать этого случая.