125 votes

Comment augmenter la taille de tas d'une application Android?

J'écris une application Android qui utilise plusieurs modèles 3D. Un tel modèle avec des textures peut prendre beaucoup de mémoire. J'ai découvert que le fabricant fixait une limite à la taille de tas qu'une application pouvait utiliser. Par exemple, ma tablette Samsung Galaxy Tab 8.9 P7310 peut occuper 64 Mo de mémoire.

Existe-t-il un moyen d'augmenter cette taille de mémoire qu'une application peut utiliser?

209voto

Raghav Sood Points 43264

Vous pouvez utiliser android:largeHeap="true" à la demande d'une plus grande taille de segment de mémoire, mais cela ne fonctionnera pas sur tous les pré Nid d'appareils. Sur la pré 2.3 appareils, vous pouvez utiliser le VMRuntime de classe, mais cela ne fonctionne pas sur pain d'épice et au-dessus.

La seule façon d'avoir une aussi grande limite possible est de le faire de mémoire intensive des tâches via le NDK, comme le NDK ne pas imposer de limites de la mémoire comme le SDK.

Sinon, vous pouvez charger uniquement la partie du modèle qui est actuellement en vue, et de charger le reste que vous en avez besoin, tout en supprimant les parties non utilisées de la mémoire. Toutefois, cela peut ne pas être possible, en fonction de votre application.

110voto

CommonsWare Points 402670

Est-il un moyen d'augmenter la taille de la mémoire d'une application peut utiliser?

Les Applications en cours d'exécution sur l'API de Niveau 11+ peut avoir android:largeHeap="true" sur le <application> élément dans le manifeste pour demander un plus grand que la normale de la taille du segment, et getLargeMemoryClass() sur ActivityManager va vous dire comment grand que le segment est. Cependant:

  1. Cela ne fonctionne que sur l'API de Niveau 11+ (c'est à dire, en Nid d'abeille et au-delà)

  2. Il n'y a aucune garantie comment grand le grand tas sera

  3. L'utilisateur aura l'impression que votre grand-requête de tas, parce qu'il aura la force de leurs autres applications de la mémoire vive de résilier les autres applications de processus pour libérer de la mémoire vive du système pour une utilisation par votre grand tas

  4. Parce que le #3, et le fait que je m'attends qu' android:largeHeap sera abusé, le soutien à cette peut être abandonnée à l'avenir, ou l'utilisateur peut être averti à ce sujet au moment de l'installation (par exemple, vous devrez demander une autorisation spéciale pour elle)

  5. Actuellement, cette fonctionnalité est légèrement documenté

22voto

android developer Points 20939

vous ne pouvez pas augmenter la taille du segment de mémoire de manière dynamique.

vous pouvez demander à utiliser de plus en utilisant android:largeHeap="true" dans le manifeste.

vous pouvez aussi utiliser le natif de la mémoire (NDK & JNI) , afin de contourner le tas de limitation de taille.

voici quelques postes que j'ai fait à ce sujet:

et voici une bibliothèque que j'ai fait pour elle:

6voto

YShinkarev Points 725

Utilisez le deuxième processus. Déclarer à AndroidManifest new Service with

 android:process=":second"
 

Échange entre le premier et le deuxième processus sur BroadcastReceiver

3voto

Jack Points 61503

D'après mes souvenirs, vous pourriez utiliser VMRuntime class dans les premières versions d'Android, mais vous ne le pouvez plus.

Je ne pense pas que laisser le développeur choisir la taille du segment de mémoire dans un environnement mobile puisse être considéré comme si sûr. Je pense qu'il est plus facile de trouver un moyen de modifier la taille du segment de mémoire dans un périphérique spécifique (pas du côté de la programmation) en essayant de le modifier à partir de l'application elle-même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X