sábado, 15 de fevereiro de 2014

Mais sobre Singletons, ObjectManager

 Estive fazendo uns testes com Singletons, isso mesmo no plural! Mas não se alarmem, é Singleton mesmo, com unicidade de instância. O plural é devido às diversas técnicas disponíveis.
 Um dos testes que achei interessante publicar é o código que segue abaixo.



 Dei o nome de ObjectManager para a classe, que tem como objetivo guardar referências para objetos a serem utilizadas em mais de um componente do Android. Os objetos são guardados em pares chave e valor, a chave sendo um Long e o valor a referência à uma instância de algum objeto.
 A implementação é thread-safe, uso um HashMap envolto com Collections.synchronizedMap() e um AtomicLong para controlar a geração das chaves.

 Para incluir um objeto usamos o método put(objeto) que retorna um Long que é a chave para recuperar a referência para o objeto, para isso usamos o método get(key).
 Uma vez colocado um objeto no ObjectManager, podemos passar a chave para um componente por um intent.putLong("meuObjeto", chave), e recuperar o objeto recuperando a chave por meio do intent.getLong("meuObjeto").

 Para testar, vamos incluir uma String no ObjectManager e passar a chave para uma intent.

Para recuperar no outro componente, usamos o intent.getLong para recuperar a chave e em seguida acessar o objeto salvo no componente anterior.

Notem que temos dois métodos para eliminar referências desnecessárias, remove e clear. Isso é necessário para evitar gasto de memória e também para evitar dados da sessão anterior mantidos pelo Android. O Android pode manter um processo para o aplicativo, mesmo não tendo nenhum componente ativo ou em background.

Por hoje, é isso.
Abraços.

Nenhum comentário:

Postar um comentário