android - Jetpack compose 为网络检索视频帧导致延迟

标签 android kotlin android-jetpack-compose

我使用下面的代码使用 MediaMetadataRetriever 从远程 url 检索视频帧,但它滞后并导致 UI 性能非常低。我怎样才能使其快速高效?

@Composable
private fun ContentItem(
    modifier: Modifier = Modifier,
    content: Content,
    onClick: (Content) -> Unit
) {
    when (content.type) {
        ContentType.Image -> {
            // handle image
        }

        ContentType.Video -> {
            val bitmap = remember { mutableStateOf<Bitmap?>(null) }

            LaunchedEffect(content) {
                val retriever = MediaMetadataRetriever()
                retriever.setDataSource(content.url)
                // Retrieve frame at 1 second
                bitmap.value = retriever.getFrameAtTime(
                    1000000,
                    MediaMetadataRetriever.OPTION_CLOSEST_SYNC
                )
                retriever.release()
            }

            bitmap.value?.let {
                Image(
                    modifier = modifier,
                    bitmap = it.asImageBitmap(),
                    contentDescription = null
                )
            }
        }
    }
}

最佳答案

您可以使用 withContextDispatchers.Default 作为

,而不是在 ui 线程上做繁重的工作
LaunchedEffect(content) {
    withContext(Dispatchers.Default){
        val retriever = MediaMetadataRetriever()
        retriever.setDataSource(content.url)
        // Retrieve frame at 1 second
        bitmap.value = retriever.getFrameAtTime(
            1000000,
            MediaMetadataRetriever.OPTION_CLOSEST_SYNC
        )
        retriever.release()
    }
}

关于android - Jetpack compose 为网络检索视频帧导致延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74434921/

相关文章:

java - Android UDP 示例代码问题

来自 CursorWindow 的 java.lang.IllegalStateException : Couldn't read row 0, col -1 - Android sqlite 问题

android - Id 未解析或不是字段

reflection - 通过反射调用数据类copy()

android - 如何在jetpack compose中预览对话框?

android - 如何在 Jetpack Compose List/Column/Row 中禁用同时点击多个项目(开箱即用的去抖动?)

java - 安卓配置属性

android - 在 Kotlin 中传递需要参数的函数作为回调

kotlin - 我如何在Kotlin中进入0.5楼?

android - Koltin : Should one use coroutine with delay or CountDownTimer 上 Android 中的定时器实现