为什么调用toByteArray()方法会造成三星手机卡顿

为什么调用toByteArray()方法会造成三星手机卡顿

业务场景:将手机录屏编码后得到的 byte[]序列化成 protobuf 类
问题:一秒编码 30 帧,随着时间推移,手机会越来越卡。
经过排查,发现是这行代码造成卡顿,
val toByteArray = screenMes.build().toByteArray()

完整的代码如下:

val byteBuffer: ByteBuffer = ByteBuffer.allocateDirect(1024 * 1024 * 3)
private lateinit var screenMes: Message.ScreencapMes.Builder
    /**
     * 编码回调
     * bytes 编码后的数据
     * flags 是否 I 帧
     */
    override fun onScreenInfo(bytes: ByteArray?, flags: Int) {
        isRecording = true
        if (bytes != null) {
            screenMes.data = ByteString.copyFrom(bytes)
            screenMes.sort = mFlowSort

            if (flags == MediaCodec.BUFFER_FLAG_KEY_FRAME) {
                screenMes.frameType = 0
            } else {
                screenMes.frameType = 1
            }

            val toByteArray = screenMes.build().toByteArray()


            byteBuffer.clear()
            byteBuffer.putInt(toByteArray.size + 4)
            byteBuffer.putInt(UdxType.Type_Send_Frame)
            byteBuffer.put(toByteArray)
            byteBuffer.flip()
            if (mConnState == 1) {
                if (mFlowSort > 999999999999999999) {
                    mFlowSort = 1
                }
                mFlowSort++
                SendUtils.getInstance().handlePacket(true, byteBuffer, screenMes.frameType)
            } else {
                mFlowSort = 1
            }

        }
    }

img


画框的两块,是否可以替换成箭头部分?