Jump to content

Recommended Posts

Posted (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 by emanuelx

com calma e sem stresses

Posted

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

Posted

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

Posted

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

Posted

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.