mcc*_*ean 5 java android surfaceview
我现在正在掌握Android,玩弄Lunar Lander样本.
我发现如果你离开应用程序(例如,点击通话按钮),它将破坏底层表面(调用surfaceDestroyed).
导航回来(将触发onWindowVisibilityChanged)应用程序将崩溃,因为它将尝试绘制到表面而不重新创建它.
是否有一些我可以放入onWindowVisibilityChanged(或其他任何地方)的代码可以重新生成SurfaceView的底层表面并很好地恢复执行?
感觉这应该是一个简单的函数调用,但我在API文档中找不到任何东西.
谢谢!
误诊!应用程序会自动重新创建表面,但其中有一个调用会在创建表面之前尝试对其进行绘制。
解决问题:
boolean mSurfaceExists;
...
public void surfaceDestroyed(SurfaceHolder holder) {
mSurfaceExists = false;
...
}
public void surfaceCreated(SurfaceHolder holder) {
mSurfaceExists = true;
...
}
protected void onWindowVisibilityChanged(int visibility) {
// only call base if there's a surface
if(mSurfaceExists)
super.onWindowVisibilityChanged(visibility);
}
Run Code Online (Sandbox Code Playgroud)
现在一切都膨胀了。(无论如何,据我所知 - Java/Android 专家如果这是不好的做法,请随时发表评论!)
| 归档时间: |
|
| 查看次数: |
4925 次 |
| 最近记录: |