【问题标题】:SurfaceTexture methods not always called on Android 7.0SurfaceTexture 方法并不总是在 Android 7.0 上调用
【发布时间】:2017-09-26 00:52:41
【问题描述】:

我的代码中有一个TextureView,我设置了一个SurfaceTextureListener

在 Android 6.0 上,方法 onSurfaceTextureDestroyedonSurfaceTextureAvailable 会在我离开活动并(分别)返回时调用,而在 Android 7.0 上,我注意到 onSurfaceTextureAvailable 仅在活动创建后调用一次。

每当我离开活动并返回时,表面都不会被破坏和重新创建,就像我从 Android 6.0 习惯的那样。

经过一番调查,我注意到 API 18、19、24 以一种方式运行,而 API 20-23 以另一种方式运行。

知道为什么,主要是如何使它在所有 Android 版本上的行为都相同?

【问题讨论】:

  • 你想在哪里调用这个方法(onSurfaceTextureDestroyed)?
  • 不确定我是否理解您的问题@Javacoder,我希望每次离开活动时都会调用该方法,这意味着每当调用 onPause 时。这是 Android 6.0 上的行为。
  • 可能是一种优化,类似于 SurfaceView 的行为方式......它是否会根据您是离开应用程序还是锁定屏幕而改变?参看。 source.android.com/devices/graphics/arch-sv-glsv#activity
  • @Remario,这很棘手 - 如果我没有在 onSurfaceTextureDestroyed 上或之前分离表面,我会收到 SurfaceTexture 错误“BufferQueue has been beenwritten”,所以我必须先这样做。此外,如果我在 onSurfaceTextureAvailable 之前附加表面,我可能还没有它。它变得复杂,因为我在每个包含一个表面的活动之间移动(对于相同的视频流),所以我需要按时分离和附加,所以调用方法的顺序很关键,我基本上需要不同的实现,我可以甚至不说根据什么?根据 API?
  • 是的,在平板电脑上它工作正常,但在移动设备上却不行。两者都有 android 7

标签: android android-7.0-nougat textureview


【解决方案1】:

我也面临同样的问题,但我通过在清单中添加以下内容来解决问题

android:hardwareAccelerated="true"

【讨论】:

  • 当您使用 SurfaceTexture 时,您应该已经拥有它,所以我已经拥有它并且问题仍然存在,所以您的回答没有意义
  • 默认情况下,这已设置为 true。此命令的唯一用途是将其设置为 false。
猜你喜欢
  • 2017-09-28
  • 2012-07-10
  • 1970-01-01
  • 2019-09-14
  • 1970-01-01
  • 2022-11-10
  • 2015-07-01
  • 2018-01-04
  • 2012-03-02
相关资源
最近更新 更多