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

本文探讨了SurfaceView在XML中预览时,两种不触发surfaceCreated方法的情况:一是使用Handler延时加载,二是点击按钮加载。作者分享了通过动态加载SurfaceView、切换显示隐藏SurfaceView来解决问题的方法,并推测原因可能在于XML加载后生命周期回调未及时添加。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SurfaceView预览界面写在XML文件中一般正常流程执行surfaceView,surfaceCreated可以正常调用;
但是下面两种方法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先隐藏一个,需要预览的时候显示隐藏那一个。

具体原因的看见网上有人说是因为SurfaceView写在xml文件中,界面显示以后其实已经创建了,但是这时候没有添加生命周期的回调,所以后来添加了,这个接口也不会调用了。

要是有别的看法可以评论区告诉我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

S1om

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值