关于SurfaceView创建时,surfaceCreated调用的问题

zw382701145 2016-11-28 02:07:32
请问一下正常流程执行surfaceView,surfaceCreated可以正常调用,SurfaceView预览界面写在XML文件中;但是试了下面两种方法surfaceCreated不会被调用,网上查了查,也没找到相关资料和说法,请问哪个大哥知道原理的?
方法一,使用handler延时加载
mHandler.postDelayed(new Thread() {
public void run() {
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
},10);
方法二,点击按钮加载
public void onClick(View view){
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
// 后来尝试发现使用动态加载SurfaceView可以解决这个问题,就是new一个SurfaceView对象,然后addView(mSurfaceView),但是还是不明白为什么SurfaceView在XML布局中。上述两种方法就不可行?哪位了解的大哥能不能讲一下原理?
...全文
2849 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
娃哈哈19910206 2018-06-29
  • 打赏
  • 举报
回复
查找到了原因。但是要怎么解决这个问题呢
陈小缘 2016-12-12
  • 打赏
  • 举报
回复
谢谢楼主, 解决了我一个问题
zw382701145 2016-11-28
  • 打赏
  • 举报
回复
自己帮自己顶一个把,刚才debug调试了一下,发现正常流程中SurfaceView类中的变量mSurfaceCreated为false,而使用postDelay方式,刚开始就被设置为mSurfaceCreated = true,这样就导致了updateWindow方法中 if (visible && mSurface.isValid()) { if (!mSurfaceCreated && (surfaceChanged || visibleChanged)) { mSurfaceCreated = true; mIsCreating = true; if (DEBUG) Log.i(TAG, "visibleChanged -- surfaceCreated"); if (callbacks == null) { callbacks = getSurfaceCallbacks(); } for (SurfaceHolder.Callback c : callbacks) { c.surfaceCreated(mSurfaceHolder); } } 。。。 进不去设置不callback无法执行

80,354

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧