0

我有一个应用程序,可以向用户显示类似于 Instagram 的照片/视频源。我想要尽可能流畅的滚动体验(避免滚动中的任何滞后)。问题是创建一个空的 simpleExoPlayer 可能需要大约10 到 20 毫秒(足以在滚动中出现帧丢失)。所以我想在应用程序启动时创建一个包含 10 个空 simpleExoPlayer 的池,并在请求时将它们提供给提要。当应用程序不滚动时,我将重新创建或重置使用过的 simpleExoPlayer(这就是为什么我需要最少 10 分钟,因为我需要等待用户停止滚动)。

他们在内存中有 10 个空的 exoplayer 有什么缺点吗?我的意思是 exoplayer,即使是空的,会使用大量资源/内存/CPU 吗?

另外,我可以遵循哪些提示以获得最流畅的滚动体验?

4

1 回答 1

2

这主要不是关于内存,而是关于设备上受限并且您与其他应用程序共享的编解码器实例。

用于视频播放的每个 ExoPlayer 实例通常使用 MediaCodecVideoAudioRenderer 和 MediaCodecAudioRenderer 进行设置。Codec 实例通常基于硬件编解码器,并且设备上可用的硬件实例数量有限且难以计算。知道在任何给定时间有多少 Codec 实例可用并非易事。

所以如果你创建了太多的 ExoPlayers,你会得到一个异常,因为没有足够的编解码器可用。您可以通过使用软件编解码器稍微解决这个问题,但对于视频,我不建议这样做,因为它不太可能表现良好。

因此,如果您可以计算出给定设备上可用的实例数量,您可以创建尽可能多的播放器,因为编解码器可用。我不清楚如何可靠地做到这一点(除了丑陋的黑客)。

一般来说,我只推荐单人游戏。

如果您想了解内存消耗,您可能需要在您的设备上进行测量,这似乎并不太难。

于 2018-02-01T11:42:37.427 回答