我在两个不同的包上有两个同名的活动。一个只是另一个的子类。我这样做是为了使用两个不同的主题,具体取决于设备。 (我们对大屏幕设备使用Theme.Dialog,对其他设备使用常规。)继承的类只覆盖onCreate
以调用其超级方法并设置一些窗口标记。
这在我的所有设备上都能很好地工作,但是我会在几次时收到非常奇怪的崩溃报告。
java.lang.StackOverflowError
at *****.activities.Register.onCreate(SourceFile)
at *****.tablet.Register.onCreateRegister(SourceFile)
(a lot of repeats)
at *****.activities.Register.onCreate(SourceFile)
at *****.tablet.Register.onCreateRegister(SourceFile)
at *****.activities.Register.onCreate(SourceFile)
at *****.tablet.Register.onCreateRegister(SourceFile)
at *****.tablet.Register.onCreate(SourceFile)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3683)
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:850)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
我没有创建onCreateRegister
所以我认为这是一个内部名称,但我不确定。我使用的是ProGuard,但如果递归调用是我的代码,则应显示行号。
我无法在我的任何设备中复制它,我甚至从我已经测试的相同模型获得此报告,因此它可能不是设备特定的问题。
有没有人知道为什么会这样,或者有更好的方法来解决这个问题?
答案 0 :(得分:0)
的StackOverflowError:
当正在运行的程序的堆栈深度超过某些深度时抛出 平台或VM特定限制。通常,这只会在a时发生 程序变得无限递归,但它也可以发生在 正确编写(但深度递归)程序。
不知道在哪里告诉你这些信息,因为我还没有看到你的代码。但这可能是一个Android / Java错误,可能不是你的错,或者你可能有一些递归无法正常执行的东西。
答案 1 :(得分:0)
我重命名了我的类,所以父类和子类不再是同一个名字了,它似乎解决了这个问题。