Приложение силы закрывается постоянно после обновления - PullRequest
2 голосов
/ 16 декабря 2011

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

Это трассировка стека:

v2.0    Dec 16, 2011 11:00:03 AM          17 reports/week              17 reports
java.lang.NullPointerException
at android.graphics.Rect.<init>(Rect.java:72)
at android.graphics.drawable.ShapeDrawable.mutate(ShapeDrawable.java:359)
at android.widget.ImageView.applyColorMod(ImageView.java:1275)
at android.widget.ImageView.onSetAlpha(ImageView.java:290)
at android.view.ViewGroup.drawChild(ViewGroup.java:1614)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.View.draw(View.java:6883)
at android.widget.FrameLayout.draw(FrameLayout.java:357)
at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.View.draw(View.java:6883)
at android.widget.FrameLayout.draw(FrameLayout.java:357)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2094)
at android.view.ViewRoot.draw(ViewRoot.java:1525)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1261)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1862)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3806)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)

Любые идеи о том, чем может быть здесь настоящий виновник или, по крайней мере, на что мне стоит обратить внимание ??

Мы изменили minSdkVersion на более высокий API, возможно ли, что пользователи с более низким API пытаются обновить или они даже не могут загрузить его в этом случае?помощь очень ценится!Спасибо!

ОБНОВЛЕНИЕ: @LuxuryMode, спасибо за ваш ответ!К сожалению, это все, что я вижу в отчете о сбое при ошибках в нашей учетной записи приложения. Стоит ли искать в другом месте?Он снова и снова публикует дату и время, версию приложения и количество отчетов, а затем эту трассировку стека.

Вверху есть следующее:

Exception class     java.lang.NullPointerException
Source method       Rect.<init>()

Мы пытаемся зарегистрировать пользователей для C2DM при запуске приложения - произойдет ли сбой приложения, если уровень API ниже 8 илиэто просто молча провалится?(хотя я не вижу ничего специфичного для C2DM в этой трассировке стека)

1 Ответ

0 голосов
/ 21 ноября 2017

Я знаю, что уже слишком поздно, но я воспроизвел эту проблему и нашел решение.

Эта проблема существует для API 15 и ниже, когда заполнение для объекта ShapeDrawable равно (0, 0, 0, 0) иэтот объект нуждается в мутации.Это может произойти, например, при вызове setAlpha(...) для ImageView.

Дело в том, что старые реализации ShapeDrawable.setPadding(int, int, int, int) проверяют параметры на нули и в этом случае устанавливают отступ Rect равным нулю:

public void setPadding(int left, int top, int right, int bottom)
{
    if ((left | top | right | bottom) == 0) {
        mShapeState.mPadding = null;
    }
}

В то же время Rect (Rect r) конструктор просто падает при получении нулевого параметра.

Итак, решение заключается в добавлении drawable.setPadding(new Rect());, чтобы избежать условия NPE.

...