他们在内存中有一个 exoplayer 池有什么缺点吗?

Is their any drawback to have a pool of exoplayer in memory?

我有一个应用程序可以向用户显示 photos/video 的提要,类似于 Instagram。我想要尽可能流畅的滚动体验(避免滚动中的任何滞后)。问题是创建一个空的 simpleExoPlayer 可能需要大约 10 到 20ms(足以在滚动中掉帧)。因此,我想在应用程序启动时创建一个 池,其中包含 10 个空的 simpleExoPlayer,并在请求时将它们提供给提要。当应用程序不滚动时,我将重新创建或重置使用过的 simpleExoPlayer(这就是为什么我需要 min 10,因为我需要等待用户停止滚动)。

内存中有 10 个空的 exoplayer 有什么缺点吗?我的意思是 exoplayer,即使是空的,也会使用很多 resources/memories/CPU 吗?

还有哪些提示可以让我获得尽可能流畅的滚动体验?

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

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

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

因此,如果您可以计算出给定设备上有多少实例可用,您就可以创建与可用编解码器一样多的播放器。我不清楚如何可靠地完成这项工作(除了丑陋的黑客攻击)。

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

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