2011-11-01 1 views
0

J'ai une application Android qui utilise beaucoup de mémoire en faisant la manipulation de pixels. Et ce que j'ai remarqué est que Android ne tue pas les programmes ou la mémoire libre en faveur de l'application de premier plan. Et mon application tombe en panne avec pas assez d'erreurs de mémoire. En ce moment, je l'ai autodétecter combien de mémoire est à gauche et à l'échelle des images de manière appropriée. Cela évite les plantages mais entraîne une mauvaise qualité d'image.Android ne tue pas automatiquement/mémoire libre quand mon application demande plus de mémoire

Existe-t-il un moyen de dire à Android OS, libérer de la mémoire car mon application a faim de mémoire. De ce que je lis d'Android, le système d'exploitation devrait le faire automatiquement. Mais cela ne semble pas le faire. Peut-être qu'il me manque quelque chose? L'iPhone a l'air de gérer ça beaucoup mieux.

Répondre

0

Évitez d'utiliser trop getPixel() et setPixel(), il en résulte donc une très mauvaise performance, il est déjà mentionné sur la documentation Android. En outre, gérer votre propre utilisation de la mémoire Java, Garbage Collector fonctionnera tant que vous suivez la règle.

1

Les applications Android ont une limite de segment Java élevée qui varie d'un périphérique à l'autre. 24 Mo est une quantité typique. Donc, la solution évidente consiste à ne pas allouer vos gros objets en Java ... vous pouvez à la place déplacer vos tableaux d'octets de pixels à partir d'une méthode C native.

Cependant 24 Mo devrait être suffisant pour n'importe qui, pour emprunter une phrase, donc je vous recommande de tenter de repenser votre approche aussi. Peut-être être plus agressif sur la réutilisation de bitmaps à partir d'un pool de taille fixe, casser vos images en plus petites tuiles, etc

+0

Les grands objets sont juste des bitmaps. Je réutilise déjà les bitmaps pour éviter les trous. Analyser/proc/meminfo permet d'obtenir les résultats les plus fiables sur la quantité de mémoire disponible sur l'appareil. De mes tests jusqu'ici je sors des erreurs de mémoire lors de l'allocation d'un bitmap (ne pas avoir d'erreurs de mémoire pour toute autre raison encore) et pour moi il semble se produire quand l'appareil lui-même est physiquement bas en mémoire atteint car le graphique de proc/meminfo se rapproche de 0. –

+0

Aussi quand je tue des applications, je pourrais utiliser plus de mémoire sans aucune forme de plantage. Je vais essayer d'allouer tout en mode natif et voir si cela aide. –

Questions connexes