【问题标题】:Difference between screen lock and home button in AndroidAndroid中屏幕锁定和主页按钮之间的区别
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这种特定情况 - 使用两个表面视图并在一个窗口中指定它们的 Z 顺序 - 目前 Android 似乎不支持。安卓开发者群This thread以上分享如下信息:

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

    嗯……你去吧!

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多