应用程序在更新后不断关闭

时间:2011-12-16 16:06:20

标签: android nullpointerexception stack-trace crash-reports

我最近推出了一个应用程序的更新,现在我收到很多用户关于崩溃的崩溃报告,甚至在打开应用程序之前。我有堆栈跟踪,但我不认识我的任何类 - 所以我不知道从哪里开始查看。

这是堆栈跟踪:

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 :(得分:0)

我知道为时已晚,但我重现了这个问题并找到了解决方案。

当ShapeDrawable对象的填充为(0,0,0,0)并且此对象需要变异时,API 15及更低版本存在此问题。例如,可能会在setAlpha(...)调用ImageView时发生这种情况。

问题是ShapeDrawable.setPadding(int, int, int, int)的旧实现检查零的参数,在这种情况下将padding Rect设置为null:

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

同时,Rect(Rect r)构造函数在接收null参数时会崩溃。

因此,解决方案是添加drawable.setPadding(new Rect());以避免NPE条件。