Приложение Nativescript angular разрывается с «java .lang.IllegalStateException: слишком много получателей, всего 1000, зарегистрированных для pid» - PullRequest
0 голосов
/ 27 февраля 2020

Я создал приложение nativescript, которое использует плагин nativescript-barcodescanner для сканирования и декодирования qr-кодов. Это приложение предназначено для сканирования большого количества qr-кодов, но не в последовательном порядке. Однако после 1000 сканирований приложение разрывается со следующим исключением:

java.lang.RuntimeException: Unable to resume activity {org.nativescript.test/com.google.zxing.client.android.CaptureActivity}: java.lang.IllegalStateException: Too many receivers, total of 1000, registered for pid: 15623, callerPackage: org.nativescript.test
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4021)
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4053)
    at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:51)
    at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1955)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7078)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)
Caused by: java.lang.IllegalStateException: Too many receivers, total of 1000, registered for pid: 15623, callerPackage: org.nativescript.test
    at android.os.Parcel.createException(Parcel.java:1974)
    at android.os.Parcel.readException(Parcel.java:19
                    // Allocate time for this cycle to end before issueing a validate request. Attempting to fix Fragment issue on some
                    // mobile devices34)
    at android.os.Parcel.readException(Parcel.java:1884)
    at android.app.IActivityManager$Stub$Proxy.registerReceiver(IActivityManager.java:3684)
    at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1567)
    at android.app.ContextImpl.registerReceiver(ContextImpl.java:1528)
    at android.app.ContextImpl.registerReceiver(ContextImpl.java:1516)
    at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:636)
    at com.google.zxing.client.android.InactivityTimer.onResume(InactivityTimer.java:69)
    at com.google.zxing.client.android.CaptureActivity.onResume(CaptureActivity.java:222)
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1416)
    at android.app.Activity.performResume(Activity.java:7609)
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4013)
    ... 11 more
Caused by: android.os.RemoteException: Remote stack trace:
    at com.android.server.am.ActivityManagerService.registerReceiver(ActivityManagerService.java:25447)
    at android.app.IActivityManager$Stub.onTransact$registerReceiver$(IActivityManager.java:10896)
    at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:126)
    at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:4162)
    at android.os.Binder.execTransact(Binder.java:739)

После попытки отладить проблему, из того, что я обнаружил, кажется, что при вызове предложенной функции BarcodeScanner.scan с помощью плагина nativescript-barcodescanner действие запускается для результата согласно этому коду , который, в свою очередь, регистрирует получателя в библиотеке google zxing (используемой этим плагином). Проблема, по-видимому, заключается в том, что при успешном сканировании, когда Activity возвращает результат, библиотека google zxing не выполняет необходимых очисток, в результате чего регистрируются висячие получатели. Обратите внимание, что когда сканер закрывается нажатием кнопки «назад», очистка выполняется, как и ожидалось.

Буду признателен за любую помощь в решении этой проблемы.

Редактировать: Добавлена ​​ссылка на репозиторий github для воспроизведения

https://github.com/jeanpaulattard/nativescript-barcodescanner-demo

...