市场上的Android应用程序收到java.lang.IllegalStateException

市场上的Android应用程序收到java.lang.IllegalStateException,java,android,illegalstateexception,flurry,Java,Android,Illegalstateexception,Flurry,如何查找此错误的来源 我从Flurry收到了崩溃日志/堆栈跟踪,但它没有向我提供崩溃发生在我的应用程序中的任何迹象。(即活动或行号) 我在本地测试过的任何设备上都没有遇到过任何异常,所以我有点不知道从哪里开始 用户没有通过Google Play报告崩溃,所以我没有Google堆栈跟踪。该报告来自一家索尼XPERIA Z1和两家独立的索尼C6903 XPERIA LTE 该应用程序拥有约4000名用户,因此我猜这只是这些用户正在做的或仅在这两台设备上发生的不寻常的事情 什么类型的错误/错误会导致这

如何查找此错误的来源

我从Flurry收到了崩溃日志/堆栈跟踪,但它没有向我提供崩溃发生在我的应用程序中的任何迹象。(即活动或行号)

我在本地测试过的任何设备上都没有遇到过任何异常,所以我有点不知道从哪里开始

用户没有通过Google Play报告崩溃,所以我没有Google堆栈跟踪。该报告来自一家索尼XPERIA Z1和两家独立的索尼C6903 XPERIA LTE

该应用程序拥有约4000名用户,因此我猜这只是这些用户正在做的或仅在这两台设备上发生的不寻常的事情

什么类型的错误/错误会导致这种类型的错误

java.lang.IllegalStateException
android.view.View$1.onClick(View.java:3954)
android.view.View.performClick(View.java:4569)
android.view.View$PerformClick.run(View.java:18553)
android.os.Handler.handleCallback(Handler.java:733)
android.os.Handler.dispatchMessage(Handler.java:95)
android.os.Looper.loop(Looper.java:212)
android.app.ActivityThread.main(ActivityThread.java:5151)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:515)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:515)
android.view.View$1.onClick(View.java:3949)
android.view.View.performClick(View.java:4569)
android.view.View$PerformClick.run(View.java:18553)
android.os.Handler.handleCallback(Handler.java:733)
android.os.Handler.dispatchMessage(Handler.java:95)
android.os.Looper.loop(Looper.java:212)
android.app.ActivityThread.main(ActivityThread.java:5151)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:515)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
dalvik.system.NativeStart.main(Native Method)
编辑:应用程序中的所有android:onClick事件在Activity类中具有以下格式的相应方法:

public void methodName(View view) {
}

是否在UI线程之外更改了任何视图?也许管理.onClick的视图或从onClick()本身触发的方法正在访问一个已更改的视图,但是UI线程不知道

我认为当您的布局中有一个
android:onClick
属性,该属性引用了一个不存在的活动方法时,就会发生这种情况。系统必须使用反射来寻找方法,这可能是危险的。我建议您永远不要在视图中使用此属性,始终设置一个
视图。单击Listener
可按代码单击视图。

当您说“已更改”时,什么样的内容会被更改?我在应用程序中有许多活动,大多数都有点击事件。一个主交换机、一个包含许多配置选项的设置页面和一个摄像头页面。相机页面有一个带有点击事件的surfaceview,用于使用developer.android.com上的标准surfaceview样式相机示例拍照。拍摄完照片后,我使用Runnable播放动画。这是唯一从UIthread运行的东西。这是一段相当长的代码。那么我应该寻找什么呢?有可能是这样的。我对surfaceview了解不多,但您可能希望任何吸引到屏幕上的东西都是从UI线程运行的。老实说,只是一个猜测,这是一个相当棘手的诊断问题,特别是如果不可复制的话。我通常使用android:onClick而不是View.OnClickListener。每个onClick都引用活动类中的一个方法,并在大多数其他设备上工作。所以我几乎可以排除存在一个不存在的方法。我将再次检查onClick调用中是否没有对不存在的方法的嵌入调用。谢谢,请检查您在布局中的onclick中引用的方法是否始终将视图作为第一个唯一参数,并确保它们是公共的,并且返回void:public void myMethod(视图v)。错误只发生在某些设备上,并且您必须在编译器不返回任何错误的情况下手动检查这样的详细信息,这一简单事实足以说服您使用OnClickListener。我使用(View View)而不是(View v)是否重要,因为我在代码中从未引用过“View/v”参数?当你说“这个错误只发生在某些设备上的简单事实……”你是说有些设备“期望”你只使用onClickListener而不使用安卓:onClick?如果是这样的话,为什么android:OnClick会出现在android规范中?我不认为参数的名称有任何影响,不。我怀疑有些设备或多或少容忍方法签名的准确性。要真正隔离问题,您需要找到发生崩溃的设备,并能够自己复制它。android:onclick属性的另一个问题是不能将其用于片段,系统将始终在活动中查找该方法。