当使用GONE设置可见性并继续使用VISIBLE时,为什么会多次调用surfaceCreated和surfaceDestroyed?

4
我发现这些代码会导致surfaceCreated和surfaceDestroyed被多次调用:
mSurfaceView.setVisibility(View.GONE);
mSurfaceView.setVisibility(View.VISIBLE);   

有人能告诉我为什么surfaceCreated和surfaceDestroyed不止被调用一次吗?
1个回答

4
如果您实现了SurfaceHolder.Callback并在每个surfaceDestroyedsurfaceCreatedsurfaceChanged方法中放置了记录器,那么您将看到这两行代码将生成以下输出:
04-01 12:50:54.688: INFO/app(4842): SurfaceView destroyed!
04-01 12:50:54.688: INFO/app(4842): SurfaceView created!
04-01 12:50:54.718: INFO/app(4842): SurfaceView changed!

在调用setVisibility之前和之后使用两个断点,确保不计算其他日志。


实际上,这两行代码是在服务的onStartCommand方法中调用的。我已经添加了断点,并发现surfaceDestroyed会进入两次或更多次。 - fla888
所以你的服务对你的活动有副作用,导致它被刷新(恢复、暂停...),其后果是表面破坏。请添加完整的服务和表面视图代码。 - Mohsen Afshin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接