Não sei se já passaram por isso, mas gostaria de compartilhar minha
duvida/problema que estou tendo.
Para encurtar a historia é o seguinte. Tenho um requisito de ter uma
Activity, que é a main e Laucher que não tem tela nenhuma mas que vai
gerenciar todas as outras activities e não usar a pilha de activities
do android (não me perguntem porque, é um requisito imútavel eheheh).
Ontem vi que o método onCreate desta activity era chamado umas 3 vezes
no decorrer do funcionamento do sistema, fazendo com que executasse um
código que eu gostaria que executasse uma única vez! Percebi que o
Bundle (persistentState) que vem como parametro do OnCreate na
primeira vez vem nulo, e depois nas outras vezes vem com uma estrutura
válida, então para nao executar o código que tenho ali novamente, fiz
a comparação para executar somente quando é nulo. Isso me gerou outros
problemas, pois parece que esta activity realmente morreu do nada e
tem q executar tudo novamente, pois todos seus atributos foram
deletados, mas eu nao poderia executar tudo novamente.
Pelo site do android li o seguinte quando o método onDestroy é
chamado: "someone called finish() on it, or because the system is
temporarily destroying this instance of the activity to save space".
Eu não chamo o finish em lugar nenhum, então parece que é o próprio
sistema que esta matando esta activity tentando liberar recursos...
Minhas perguntas são:
1 - Vocês sabem se tem como deixar uma activity sempre persistente e
não ser destruída como este caso?
2 - Será que pode ser problema de memória, e aumentando isso no
simulador resolveria?
Se alguém já passou por isso e puder dar uma dica...
Sds,
Márcio
Te aconselho a estudar a fundo o Ciclo de Vida de Aplicativos e
Activities no Android.
O sistema pode "matar" uma activity não visivel (depois de chamar
onPause() até o gingerbread ou depois do onStop() a partir do
honeycomb) para liberar memória. Essa activity é recriada
automaticamente pelo sistema quando necessário, passando o Bundle
savedInstance que contem os dados salvos pela activity.
Lúcio Maciel
luc...@gmail.com
2012/2/15 Márcio Oliveira <prof...@gmail.com>:
Obrigado pela dica!
Isto é horrivel do ponto de vista de modelagem né, estranho e
decepcionante este mecanismo. Vou tentar estudar mais e entender
melhor e tentar fazer um Workaround para este problema. Se alguem
tiver mais alguma dica, será bem vinda!!
Sds,
Márcio
Concordo com voce em relação a ter um mecanismo para liberar memória,
mas acho que deveria haver algo mais indicativo que o sistema não
liberasse o que eu não quisesse, ou que liberasse por ultimo com uma
certa prioridade. Além disso, eu estou com uma aplicação simples sem
muitas telas (apesar que algumas telas tem vários botões como um
teclado), acredito que não deveria estar matando esta activity por
falta de recurso ao meu ver.
Por falar em lidar com isso, alguem tem algum exemplo didatico de como
eu poderia contornar este problema, sei la, tipo no onDestroy eu salvo
o Contexto de atributos no Bundle da Activity (talvez no
setPersistentState, algo assim), e no OnCreate eu pego isso e
reatribuo para os atributos, mas ou menos assim q poderia ficar?
Sds