emanuelx Posted February 18, 2014 at 12:45 AM Report #545634 Posted February 18, 2014 at 12:45 AM (edited) Boas, eu estou a criar uma app para android, mas tenho o seguinte problema. Na activity principal abre uma segunda activity, esta vai ocupar mais memoria ram, mas o problema é que quando ele sai finish(), a memoria não é libertada. Sabem como é que eu posso fazer isso? Porque se eu não libertar a memoria a aplicação está sempre a incrementar até não poder mais. e existe uma diferença na memoria usada entre a versao 4 e a versao 2.3. No android 2.3 a memoria está sempre a casa dos 30Mb, no android 4.4.2 começa logo nos 60Mb e está sempre a subir. Edited February 18, 2014 at 01:00 AM by emanuelx com calma e sem stresses
KTachyon Posted February 18, 2014 at 02:33 AM Report #545639 Posted February 18, 2014 at 02:33 AM O Garbage Collector é que trata da gestão de memória. Não podes fazer nada quanto a isso. Quando o Garbage Collector achar que está na hora de libertar memória, irá libertar memória. Isto se não estiveres a manter referências para objectos que achas que deveriam estar a ser libertados. Se for esse o caso, tens que deixar de referenciar esses dados para que a memória seja efectivamente libertada. “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
emanuelx Posted February 18, 2014 at 01:55 PM Author Report #545674 Posted February 18, 2014 at 01:55 PM O Garbage Collector é que trata da gestão de memória. Não podes fazer nada quanto a isso. Quando o Garbage Collector achar que está na hora de libertar memória, irá libertar memória. Isto se não estiveres a manter referências para objectos que achas que deveriam estar a ser libertados. Se for esse o caso, tens que deixar de referenciar esses dados para que a memória seja efectivamente libertada. tipo ddo genero eu tenho vários objecto numa listaview, cada item da lista é composto por vários elementos, imagens, textView etc... Num DDMS, um dos Byte-array está sempre a aumentar, quando movo a listview, ou quando adiciono um novo elemento. já experimentei a limpar essas arrayslist quando saio da activity , mas não funciona. mas a aplicação está estável e fluida em ambos os telemóveis, galaxy gio e nexus 7. Entao quer dizer que estes valores que eu tenho são normais, não me tenho de preocupar a limpar os arrays depois de fechar a activity, que o próprio SO faz a limpeza da memória certo? com calma e sem stresses
KTachyon Posted February 18, 2014 at 04:23 PM Report #545693 Posted February 18, 2014 at 04:23 PM Em teoria sim. Na prática podes estar a reter alguma coisa que não devias. Podes fazer o teste: Tenta chegar ao limite da memória e vê se o GC te a limpa. “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
emanuelx Posted February 19, 2014 at 07:07 PM Author Report #545852 Posted February 19, 2014 at 07:07 PM Em teoria sim. Na prática podes estar a reter alguma coisa que não devias. Podes fazer o teste: Tenta chegar ao limite da memória e vê se o GC te a limpa. Tenho de usar o comando System.gc(); ou ele faz automaticamente? com calma e sem stresses
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now