terça-feira, 25 de fevereiro de 2014

Regras para codificação Java no estilo Google

  Foi liberado recentemente pela Google o documento que define as regras para os programadores Java da empresa seguirem na codificação dos programas em Java: Google Java Style

  Interessante, vale uma leitura.

domingo, 23 de fevereiro de 2014

Compartilhar dados entre componentes Android

  Para compartilhar dados entre componentes de uma aplicação Android você deve primeiro decidir entre duas opções: persistir ou deixá-los na memória.
  Se optar pela persistência dos dados, tem as seguintes opções: preferences, files, SQLite DB e Content Provider.
  Se for deixá-los na memória, as opções são: através da dupla Intent/Bundle com os métodos putExtra/getXxxExtra, Uri (intent.setData/intent.getData), Singleton, variáveis/métodos públicos de classe (estáticos) e variáveis/métodos públicos de instância.
Observações:
1. Quando salvar - se for compartilhar os dados entre activities, lembre-se de que devem estar salvos no máximo até o método onPause, devido ao ciclo de vida das activities.
2. Se os dados forem compartilhados entre threads (ou outros recursos que usem threads, como AsyncTasks) e forem mutáveis, lembre-se de torná-los thread-safe.
3. Para enviar objetos por Intent/Bundle eles devem implementar Serializable ou Parcelable, para recuperar com getSerializableExtra ou getParcelableExtra, respectivamente.
4. Uma variação do Singleton é extender a classe Application, mas eu não aprecio muito essa opção.
5. Estude e entenda bem as diferenças entre as opções, as diferenças são às vezes sutis, mas com resultados nem tanto.
Essas são apenas algumas das opções, as mais básicas, mas devem ser úteis na maioria das necessidades do dia-a-dia.
Abraços

terça-feira, 18 de fevereiro de 2014

Dica: aprender uma nova linguagem de programação

A receita é simples: estude os recursos básicos da linguagem, estude os recursos específicos, aprenda com os melhores exemplos de uso avançado, e tente captar o "espírito" filosófico da linguagem.
Não dá para programar bem numa linguagem sem estudar profundamente os seus recursos.
Observe alguém tentando falar uma nova língua com um vocabulário restrito; imagine fazer um programa com algumas poucas instruções.

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.

Projetos

Depois de um longo tempo sem programar, estou retomando.
Nos últimos meses praticamente escrevi uma ou outra linha de código, ou seja, quase nada.
Por outro lado, li muito. Assuntos diversos.
Muita teoria.
Agora o objetivo é ganhar ritmo em programação.
Vamos ver.