Поймать исключение, брошенное библиотекой в ​​другой поток (Android) - PullRequest
0 голосов
/ 19 декабря 2018

Я использую библиотеку, которая иногда (примерно 1 из 100 раз) выдает ConcurrentModificationException, что приводит к сбою приложения.

В трассировке стека не упоминается мой код, но вместо этого код библиотеки,Я пытался отловить исключение, когда я вызываю библиотеку, однако это не работает.

Я предполагаю, что исключение выдается в новом потоке в библиотеке.

Как я могу поймать такое исключение?

Libary: Старая библиотека Philips Hue Java.(Я собираюсь перейти на новый, в ближайшее время.)

Исключение:

E/AndroidRuntime: FATAL EXCEPTION: Thread-21319
    Process: my.package, PID: 21561
    Theme: themes:{...}
    java.util.ConcurrentModificationException
        at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
        at com.philips.lighting.hue.sdk.notification.impl.PHNotificationManagerImpl$3.onReceived(PHNotificationManagerImpl.java:180)
        at com.philips.lighting.hue.sdk.notification.impl.PHHueResultReceiver.execute(PHHueResultReceiver.java:24)
        at com.philips.lighting.hue.sdk.notification.impl.PHNotificationManagerImpl.notifyBridgeSearchResult(PHNotificationManagerImpl.java:188)
        at com.philips.lighting.hue.sdk.upnp.PHBridgeSearchManagerImpl$1.run(PHBridgeSearchManagerImpl.java:198)

1 Ответ

0 голосов
/ 19 декабря 2018

Полагаю, вы изменяете значение массива во время его итерации.

Классы Java Collection не подвержены сбоям, что означает, что если коллекция будет изменена, когда какой-либо поток будет проходить по ней с помощью итератора, iterator.next () сгенерирует исключение ConcurrentModificationException.

Вот как этого избежать: Как избежать java.util.ConcurrentModificationException при переборе и удалении элементов из ArrayList

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...