【发布时间】:2012-07-12 19:48:14
【问题描述】:
我不明白用户锁定屏幕(使用顶部屏幕锁定按钮)并立即返回应用程序与用户按下主页按钮然后立即返回应用程序之间的区别。
似乎所有相同的调用都在进行。根据我的观察:
按下主页按钮或屏幕锁定时调用:onPause -> onStop
在再次按下home键或屏幕锁定后按下应用程序时调用:onRestart -> onStart -> onResume
我的个人问题:
这尤其让我感到沮丧,因为我在 onResume 时将 SurfaceView 和 GLSurfaceView 重新创建为 FrameLayout,但是,根据按下的按钮,元素的顺序正在发生变化。我的 onResume 中有以下代码:
cameraPreviewArea = (FrameLayout) findViewById(id.camera_preview);
cameraPreviewArea.addView(glView, glLayout);
cameraPreviewArea.addView(camprevSurfaceView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
这具有在以下情况下将我的 glSurfaceView 显示在顶部的效果:应用程序第一次启动时,以及当应用程序从屏幕锁定和屏幕解锁状态恢复时。但是,在按下主页按钮,然后重新打开应用程序时,SurfaceView 被放置在 glSurfaceView 的顶部!
如果我按如下方式切换 addView 调用,则会出现相反的情况。我可以用一些布尔标志来解决这个问题,但由于我不确定屏幕锁定/解锁和主页按钮之间的区别,我不清楚我将在哪里设置布尔值。另外,我不想以这种方式解决问题,因为它看起来很老套,而且对问题缺乏任何真正的理解。
提前谢谢你!
【问题讨论】:
-
您随后是否从
onPause()或onStop()中的FrameLayout中删除视图?甚至修改视图层次结构的目的是什么? -
是的,我在发布代码之前(在 onPause 中)致电
cameraPreviewArea.removeAllViews();。您可能提出了一个关于在 onPause 和 onStop 上修改视图层次结构的好观点。我可能想重新考虑不重新创建各种视图。
标签: android android-activity surfaceview glsurfaceview