我有一个应用程序,向用户显示类似于Instagram的照片/视频源。我希望尽可能顺畅的滚动体验(避免滚动中的任何滞后)。问题是创建一个空的simpleExoPlayer可能需要 10到20ms (这足以让滚动中的帧丢失)。所以我想在应用程序的开始时创建一个10个空的simpleExoPlayer 的池,并在它要求时将它们提供给feed。当应用程序不滚动时,我将重新创建或重置使用过的simpleExoPlayer(这就是为什么我需要min 10因为我需要等待用户停止滚动)。
在内存中有10个空的exoplayer有任何缺点吗?我的意思是exoplayer,甚至是空的,会使用大量资源/内存/ CPU吗?
此外,我可以遵循哪些提示,以获得尽可能最流畅的滚动体验?
答案 0 :(得分:1)
它主要不是关于内存,而是关于设备上限制的Codec实例,并且您与其他应用共享。
用于视频播放的每个ExoPlayer实例通常使用MediaCodecVideoAudioRenderer和MediaCodecAudioRenderer进行设置。 Codec实例通常基于硬件编解码器,并且设备上可用的硬件实例数量既有限又难以弄清楚。知道在任何给定时间有多少Codec实例是不容易的。
因此,如果您创建了太多的ExoPlayers,您将获得异常,因为没有足够的可用编解码器。您可以使用软件编解码器稍微解决这个问题,但对于视频而言,这是我不推荐的,因为它不太可能表现良好。
因此,鉴于您可以确定给定设备上可用的实例数,您可以创建尽可能多的编解码器。我不清楚如何可靠地完成(除了丑陋的黑客)。
一般情况下,我只推荐一个玩家。
如果您想了解内存消耗情况,可能需要在设备上进行测量,这似乎并不太难。