Подтвердить что ты не робот

NullPointerException в handleStopActivity. Нет ссылки на мой код в трассировке стека.

Я немного растерялся, здесь. Я наблюдаю неуклонно увеличивающееся число этих NullPointerException в handleStopActivity. Я подозреваю, что увеличение coinicides с увеличением 2,2 обновлений до владельцев Droid, хотя это просто догадка. Я никогда не видел аварии, и трассировка стека, предоставляемая рынком, не упоминает ни один из классов, которые я написал. Таким образом, я понятия не имею, с чего начать исправление проблемы.

java.lang.NullPointerException
at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3674)
at android.app.ActivityThread.access$2600(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2153)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:144)
at android.app.ActivityThread.main(ActivityThread.java:4937)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)

Поскольку я не знаю причину, я также не знаю, какую информацию предоставить для оказания помощи в диагностике, поэтому я дам обзор: Мое приложение WootWatcher. Он отслеживает Woot.com и уведомляет пользователей о новых товарах для продажи. Он делает это с помощью службы, которая работает в отдельном процессе. Служба и основной вид деятельности взаимодействуют друг с другом через интерфейс помощи и обратный вызов. Я также использую обработчики сообщений как в сервисе, так и в действии и часто создаю потоки для дорогостоящих задач.

4b9b3361

Ответ 1

Оглядываясь назад на этот 4-летний вопрос, я понимаю, что я должен его диагностировать, но, к сожалению, я не могу найти ни одной версии AOSP, для которой эти строки совпадают. Droid, должно быть, использовал некоторую измененную версию источника, которая не была доступна.

Тем не менее, Froyo handleStopActivity() не имеет много возможностей для исключения нулевого указателя. Скорее всего, указывается на Activity.finish(), когда Activity уже остановлена ​​или находится в процессе остановки.

Это обычно происходит, когда вы регистрируете слушателей, которые в конечном итоге вызывают finish(), и вы не отмените регистрацию этих слушателей в onPause().

Ответ 2

Как сообщать об ошибке в проекте Android (будет ли проверять, кто-нибудь еще сообщил об этом)? Если ни один код из вас не находится в трассировке стека, это сигнализирует об ошибке в структуре. Хотя, возможно, в другом коде, который вы нарушаете, например. невысказанный контракт/предположение.

Ответ 4

Я не знаю, если вы все еще ищете решение, но вот что я узнал. Если вы нашли реальное решение, сообщите мне.

У меня была такая же проблема. У меня никогда не было этой проблемы и без изменения кода она появилась по какой-то причине. Используя Google, я нашел вопрос, который опубликовал Джозеф, но это не похоже на то же самое. Я также нашел этот и . У этих двоих, похоже, одна и та же проблема, но нет решения. Тогда я нашел этот блог.

Автор рассказывает что-то об этом - ошибка в Android. Кроме того, это связано с Cursor. Это не исправить мою проблему, но я заметил, что я использовал Cursor, несколько строк перед вызовом startActivity(someIntent); (я также называл finish(), но удаление этой строки не имело значения).
Я попытался удалить строки, содержащие Cursor, и внезапно он снова работает.
Я понятия не имею, почему это работает, но это так. Я просто переместил код с помощью Cursor в другой Activity.

Это определенно не хорошее решение, но оно работает для меня.

Есть еще один вопрос: вы даже используете Cursor и звоните startActivity(..) или что-то подобное?

Edit:
Я только что узнал, что я не исправил проблему, я просто недостаточно проверял. Activity Я начал работать нормально, пока не захотел создать следующий Activity из этого Activity, который я начал раньше. При запуске следующего Activity мое приложение снова сработает.

Ответ 5

Может быть, попробуйте обернуть метод handleStopActivity в блок try-catch и обработать ошибку самостоятельно, предоставив себе более подробную информацию и предотвращая "принудительное закрытие"?