Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

131
Vistas
¿Una gran cantidad de extraBufferCapacity en SharedFlow causa pérdida de memoria?

Estoy trabajando en una aplicación de chat con arquitectura MVVM y uso SharedFlow para transferir mensajes entrantes del Repository a ViewModel . Cuando el usuario está desconectado y otro usuario le envía una gran cantidad de mensajes, tan pronto como el usuario está en línea, los mensajes se reciben uno tras otro en el Repository y deben transferirse a ViewModel para mostrarlos en la interfaz de usuario. . Primero establecí el valor de extraBufferCapacity en 1 y vi que en este caso solo se reciben los dos primeros mensajes en ViewModel . Luego aumenté el valor de extraBufferCapacity a 6 y vi que los primeros 7 mensajes se transmitieron a ViewModel . Ahora, si aumento el valor de extraBufferCapacity a Int.MAX_VALUE , ¿provocará una pérdida de memoria?

Repositorio:

 object ChatRepo { private val _receiveMessageFlow = MutableSharedFlow<Message>(extraBufferCapacity = Int.MAX_VALUE) val receiveMessageFlow = _receiveMessageFlow.asSharedFlow() fun listen(socket: Socket) { socket.on(Config.ON_PV_MESSAGE, onPvMessage) } private val onPvMessage = Emitter.Listener { args -> val message = Gson().fromJson(args[0].toString(), Message::class.java) _receiveMessageFlow.tryEmit(message) } }

Ver modelo:

 class ChatViewModel(var receiver: User) : ViewModel() { private val _messagesLive = MutableLiveData<Resource<MessageList>>() val messagesLive = _messagesLive as LiveData<Resource<MessageList>> init { observeReceivedMessage() } private fun observeReceivedMessage() { viewModelScope.launch { ChatRepo.receiveMessageFlow.collect { message -> if (message.senderUid == receiver.uid) { addMessage(message) } } } } private fun addMessage(message: Message) { val resource = _messagesLive.value ?: Resource.success(MessageList()) val messageList = resource.data ?: MessageList() messageList.addMessageLast(message) _messagesLive.value = Resource.add(messageList, 0) } }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

¿Qué es una pérdida de memoria de Wikipedia?

En informática, una fuga de memoria es un tipo de fuga de recursos que ocurre cuando un programa de computadora administra incorrectamente las asignaciones de memoria de manera que la memoria que ya no se necesita no se libera. Una pérdida de memoria también puede ocurrir cuando un objeto está almacenado en la memoria pero el código en ejecución no puede acceder a él.

De acuerdo con su código, tiene ChatRepo , que es object ( Singleton ), la vida útil de ChatRepo es la vida útil de la aplicación. Tiene un campo receiveMessageFlow , que puede almacenar en búfer algunos datos, no consumidos por ningún suscriptor. Si el único suscriptor está en ChatViewModel y ya no consume los datos emitidos por receiveMessageFlow , pero receiveMessageFlow aún almacena en búfer algunos datos, entonces en este caso diría que hay una pérdida de memoria, porque la memoria que ya no se necesita no se libera .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda