【问题标题】:Android: Custom Surface View crashing upon orientation changeAndroid:自定义 Surface View 在方向更改时崩溃
【发布时间】:2013-09-25 00:37:44
【问题描述】:

我正在阅读this tutorial,了解如何在 XML 布局中使用自定义表面视图类,当我运行代码时,当我的手机方向改变时,应用程序崩溃了。我注意到很多涉及自定义线程和表面视图子类在方向更改时崩溃的示例,有人知道为什么会发生这种情况吗?

09-25 18:19:40.639: E/Trace(4982): error opening trace file: No such file or directory (2)
09-25 18:19:40.639: D/ActivityThread(4982): setTargetHeapUtilization:0.25
09-25 18:19:40.639: D/ActivityThread(4982): setTargetHeapIdealFree:8388608
09-25 18:19:40.639: D/ActivityThread(4982): setTargetHeapConcurrentStart:2097152
09-25 18:19:40.959: D/libEGL(4982): loaded /system/lib/egl/libEGL_adreno200.so
09-25 18:19:40.979: D/libEGL(4982): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
09-25 18:19:40.979: D/libEGL(4982): loaded /system/lib/egl/libGLESv2_adreno200.so
09-25 18:19:41.049: I/Adreno200-EGLSUB(4982): <ConfigWindowMatch:2087>: Format RGBA_8888.
09-25 18:19:41.099: E/(4982): <s3dReadConfigFile:75>: Can't open file for reading
09-25 18:19:41.099: E/(4982): <s3dReadConfigFile:75>: Can't open file for reading
09-25 18:19:41.099: D/OpenGLRenderer(4982): Enabling debug mode 0
09-25 18:19:58.127: W/dalvikvm(4982): threadid=11: thread exiting with uncaught exception (group=0x40d46438)
09-25 18:19:58.147: E/AndroidRuntime(4982): FATAL EXCEPTION: Thread-156822
09-25 18:19:58.147: E/AndroidRuntime(4982): java.lang.NullPointerException
09-25 18:19:58.147: E/AndroidRuntime(4982):     at com.example.practicesurface.MySurfaceView.onDraw(MySurfaceView.java:129)
09-25 18:19:58.147: E/AndroidRuntime(4982):     at com.example.practicesurface.MySurfaceView$MySurfaceThread.run(MySurfaceView.java:39)

【问题讨论】:

    标签: android xml surfaceview


    【解决方案1】:

    移动这行代码:

    thread = new MySurfaceThread(getHolder(), this);
    

    从 MySurfaceView 中的 init() 方法,到 surfaceCreated() 方法。

    移动方向时,onCreate方法被调用,但MySurfaceView的构造函数不会被调用,因为它被保留了。

    希望这会有所帮助:)

    【讨论】:

    • 谢谢,但这似乎并不能完全解决问题。该应用程序现在崩溃的情况减少了,但如果方向变化太大,它仍然会崩溃。
    • 嗯,我猜这解决了你遇到的问题。我猜这是一个非法的状态例外。你现在遇到什么例外?听起来可能是内存不足异常?
    • 09-25 11:51:59.005:E/AndroidRuntime(32098):致命异常:Thread-154850 09-25 11:51:59.005:E/AndroidRuntime(32098):java.lang。 NullPointerException
    • 你需要发布你的 logcat 日志。
    • 很有趣...在 MySurfaceView 的 onDraw 方法中有些东西变为空,但除非您在示例中编辑了很多代码,否则那里不应该有太多...要么是 Canvas,或油漆。检查看看什么变成了空。如果是画布,请将整个方法包装在 if(canvas != null) 语句中。如果是油漆,请快速重新创建油漆,或者更好的是,在 onSurfaceCreated 方法中重新创建油漆,而不是 init / 声明行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多