android – SurfaceView.onAttachedToWindow中的NullPointerException(SurfaceView.java:207)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了android – SurfaceView.onAttachedToWindow中的NullPointerException(SurfaceView.java:207),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2553字,纯文字阅读大概需要4分钟。
内容图文
![android – SurfaceView.onAttachedToWindow中的NullPointerException(SurfaceView.java:207)](/upload/InfoBanner/zyjiaocheng/827/05f961c454844f6980515f459770fbe8.jpg)
我从SurfaceView.onAttachedToWindow获得了这个异常.看起来SurfaceView试图引用mParent,但它是null.有谁知道为什么不设置父级但是会调用onAttachedToWindow?
我正在使用SurfaceView进行相机预览.我有一个ViewGroup,它是从活动的根视图中添加/删除的. ViewGroup内部是SurfaceView和WebView.
以下是ViewGroup的代码:http://pastebin.com/eSyZ3v3P,以下是显示/隐藏相机的代码:http://pastebin.com/5iaEFCQr
任何帮助将非常感激.
这是完整的堆栈跟踪:
java.lang.NullPointerException
at android.view.SurfaceView.onAttachedToWindow(SurfaceView.java:207)
at android.view.View.dispatchAttachedToWindow(View.java:11755)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1199)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
at android.view.Choreographer.doCallbacks(Choreographer.java:555)
at android.view.Choreographer.doFrame(Choreographer.java:525)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
– 编辑 –
对不起,我忘了提,我不知道重现异常的步骤.每次运行应用程序时代码都有效,但是我将这些异常从Samsung Galaxy Tab 3发送到我的记录器.问题不一致.
解决方法:
我相信你的错误是因为你在这一行中使用陈旧的视图:
setPreviewDisplay(this.surfaceView.getHolder())
在这一行中,当它崩溃时,surfaceView不再有效.您应该使用surfaceChanged / surfaceCreated中返回的SurfaceHolder.
这也是我的bug的来源.
一般来说:
当您尝试将视图(预览)附加到不再存在的窗口时,可能会发生此错误.例如,您有一些长时间运行的代码(打开相机),然后您附加视图,手机已旋转(旧上下文)或其他应用程序正在显示(因此无法附加到看不见的视图),或者锁定屏幕等等
避免这种情况的一种方法是在尝试附加视图之前确保您的Activity有一个可见窗口.我希望我有更多细节告诉你如何做到这一点.
一个可能的问题是你正在做Camera.open(),这可能需要一些时间,特别是在某些设备上,在你调用addView()之前,所以可能在你进入addView()时,窗口不可用.考虑在后台线程上执行Camera.open(),完成所有操作后,执行addView().
我看到你在UI线程上运行了几个线程.您希望确保在执行addView之前完成这些操作.
内容总结
以上是互联网集市为您收集整理的android – SurfaceView.onAttachedToWindow中的NullPointerException(SurfaceView.java:207)全部内容,希望文章能够帮你解决android – SurfaceView.onAttachedToWindow中的NullPointerException(SurfaceView.java:207)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。