ANR в статическом BroadcastReceiver при получении намерения USB_DEVICE_ATTACHED - PullRequest
0 голосов
/ 09 октября 2018

Консоль Google Play показывает мне случайные ANR, связанные с моим статически зарегистрированным BroadcastReceiver, который получает намерения состояния USB.

Кластер:

Broadcast of Intent {act = android.hardware.usb.action.USB_DEVICE_ATTACHED flg = 0x10000010 cmp = eu.sisik.hackendebug / .UsbReceiver (имеет дополнительные функции)}

В моем приемнике вещания я просто пересылаю намерение другим частям приложения для дальнейшей обработки,Вот код BroadcastReceiver

public class UsbReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent != null)
        {
            final String action = intent.getAction();
            if (action != null && action.equals(ACTION_USB_DEVICE_ATTACHED))
            {
                Parcelable usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);    

                Intent broadcastIntent = new Intent(Constants.ACTION_USB_DEVICE_CONNECTED);
                broadcastIntent.putExtra(UsbManager.EXTRA_DEVICE, usbDevice);

                context.sendBroadcast(broadcastIntent);
            }
        }
    }
}

Получатель в AndroidManifest.xml

<receiver android:name=".UsbReceiver">
    <intent-filter>
        <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
    </intent-filter>
    <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
               android:resource="@xml/device_filter" />

    <intent-filter>
        <action android:name="android.hardware.usb.action.USB_STATE" />
    </intent-filter>
    <meta-data android:name="android.hardware.usb.action.USB_STATE"
               android:resource="@xml/device_filter" />
</receiver>

Одна из трассировок стека в консоли Google для "main" показывает только это

"main" prio=5 tid=1 Native
  | group="main" sCount=1 dsCount=0 obj=0x7525f598 self=0xb4824500
  | sysTid=3945 nice=0 cgrp=apps/bg_non_interactive sched=0/0 handle=0xb6fb2b4c
  | state=S schedstat=( 128672069 176294544 277 ) utm=8 stm=4 core=2 HZ=100
  | stack=0xbe2ea000-0xbe2ec000 stackSize=8MB
  | held mutexes=
  #00  pc 0000000000040944  /system/lib/libc.so (__epoll_pwait+20)
  #01  pc 0000000000019fc3  /system/lib/libc.so (epoll_pwait+26)
  #02  pc 0000000000019fd1  /system/lib/libc.so (epoll_wait+6)
  #03  pc 0000000000012dff  /system/lib/libutils.so (_ZN7android6Looper9pollInnerEi+102)
  #04  pc 000000000001307b  /system/lib/libutils.so (_ZN7android6Looper8pollOnceEiPiS1_PPv+130)
  #05  pc 00000000000873bd  /system/lib/libandroid_runtime.so (_ZN7android18NativeMessageQueue8pollOnceEP7_JNIEnvP8_jobjecti+22)
  #06  pc 0000000000000575  /system/framework/arm/boot.oat (Java_android_os_MessageQueue_nativePollOnce__JI+96)
  at android.os.MessageQueue.nativePollOnce (Native method)
  at android.os.MessageQueue.next (MessageQueue.java:323)
  at android.os.Looper.loop (Looper.java:143)
  at android.app.ActivityThread.main (ActivityThread.java:7225)
  at java.lang.reflect.Method.invoke! (Native method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1230)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120) 

Я не могу воспроизвести эту ошибку на своих устройствах, и я не вижу проблем с моим минимальным BroadcastReceiver.

ANR появляется случайным образом на устройствах разных производителей, так что это не простопроблема, связанная с конкретным устройством, и я должен попытаться исправить ее в своем коде.

Сообщаемая версия Android в основном 6 и один отчет от Android 9.

Как можно решить эту проблему или прихотя бы как это воспроизвести?

спасибо

...