Android中屏幕锁定和主页按钮的区别

时间:2012-07-12 19:48:15

标签: android android-activity surfaceview glsurfaceview

我不明白用户锁定屏幕(使用顶部屏幕锁定按钮)和立即返回应用程序与用户按下主页按钮然后立即返回应用程序之间的区别。

似乎正在进行所有相同的通话。根据我的观察:

按下主页按钮或屏幕锁定时调用:onPause - >的onStop

在重新按下主页按钮或屏幕锁定后按下应用程序时调用:onRestart - > onStart - >的onResume

我个人的问题:

这特别导致我greif,因为我在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调用,则会出现相反的情况。我可以使用一些布尔标志来解决这个问题,但是由于我对屏幕锁定/解锁和主页按钮之间的差异的不确定性,我不清楚在哪里设置布尔值。另外,我不想以这种方式解决这个问题,因为它看起来很hacky并且对这个问题缺乏真正的理解。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

通常,您没有理由需要不断添加和删除Activity层次结构中的视图,删除此代码会使您的应用程序更加一致。

由于您感兴趣的两个视图都是SurfaceView组件,如果在窗口变为可见或隐藏时需要执行某些操作,则可以利用SurfaceHolder.Callback来监控onSurfaceCreated()onSurfaceDestroyed()方法。

答案 1 :(得分:0)

这种特殊情况 - 使用两个surfaceView并在窗口中指定它们的Z顺序 - 目前似乎不受Android支持。 android开发者组的This thread共享以下信息:

  

任何类型的多个活动重叠曲面视图都不是   目前由框架支持。你可以让他们工作,但是   它主要是由于运气 - 视图层次结构没有定义   这些表面的Z排序,也不试图确保它们是Z排序的   任何特定的方式,所以这可能因任何原因而改变。

嗯......你去了!

...但是对于任何尝试此操作的人,我找到了一种解决方法:让您的相机预览尺寸为1x1小方块。这将允许您同时显示两者(因为必须显示相机预览才能继续预览)并忽略cameraPreview为您提供的令人讨厌的SurfaceView问题。我相信有一个更好的解决方案,严格使用一个GLSurfaceView,但它在3.0以下不兼容。