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 fixe une limite à la taille du tas qu'une application peut 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?
largeHeap=true
FTWLes applications exécutées au niveau d'API 11+ peuvent avoir
android:largeHeap="true"
sur l'<application>
élément dans le manifeste pour demander une taille de tas plus grande que la normale, etgetLargeMemoryClass()
surActivityManager
vous dira quelle est la taille de ce tas. Toutefois:Cela ne fonctionne que sur l'API niveau 11+ (c.-à-d. Honeycomb et au-delà)
Il n'y a aucune garantie de la taille du gros tas
L'utilisateur percevra votre demande de gros tas, car cela
forcera ses autres applications à sortir de la RAM etmettra fin aux processus d'autres applications pour libérer de la RAM système pour une utilisation par votre grand tasEn raison du n ° 3, et du fait que je pense que
android:largeHeap
cela sera abusé, le support pour cela peut être abandonné à 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 cela )Actuellement, cette fonctionnalité est peu documentée
la source
inBitmap
surBitmapOptions
). Au - delà, supprimer toutes les références à eux, et finalement ils se ramasse-miettes.android:largeHeap
. Cependant, la demande d'un tas volumineux peut nuire à l'expérience de l'utilisateur dans son ensemble, en forçant d'autres processus d'application à se terminer plus tôt que ce qui aurait été nécessaire autrement.vous ne pouvez pas augmenter dynamiquement la taille du tas.
vous pouvez demander à en utiliser davantage en utilisant
android:largeHeap="true"
dans le manifeste.vous pouvez également utiliser
native memory (NDK & JNI)
, de sorte que vous contourniez la limitation de la taille du tas.voici quelques articles que j'ai publiés à ce sujet:
Comment mettre en cache des bitmaps dans la mémoire native
Opérations bitmap JNI, pour éviter les MOO lors de l'utilisation d'images volumineuses
et voici une bibliothèque que j'ai créée pour cela:
la source
Utilisez le deuxième processus. Déclarer comme
AndroidManifest
neufService
avecÉchange entre le premier et le deuxième processus sur
BroadcastReceiver
la source
Cela peut être fait de deux manières en fonction de votre système d'exploitation Android.
android:largeHeap="true"
balise d'application du manifeste Android pour demander une taille de tas plus grande, mais cela ne fonctionnera pas sur les appareils antérieurs à Honeycomb.Avant de définir HeapSize, assurez-vous que vous avez entré la taille appropriée qui n'affectera pas les autres applications ou fonctionnalités du système d'exploitation. Avant les paramètres, vérifiez simplement la taille de votre application, puis définissez la taille juste pour accomplir votre travail. N'utilisez pas autant de mémoire, sinon d'autres applications pourraient affecter.
Référence: http://dwij.co.in/increase-heap-size-of-android-application
la source
D'après ce dont je me souviens, vous pouviez utiliser la
VMRuntime
classe dans les premières versions d'Android, mais maintenant vous ne pouvez plus.Je ne pense pas que laisser le développeur choisir la taille du tas 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 tas dans un périphérique spécifique (pas du côté de la programmation) qu'en essayant de le modifier à partir de l'application elle-même.
la source
L'augmentation de Java Heap mange injustement les ressources mobiles déficitaires. Parfois, il suffit d' attendre le ramasse-miettes , puis de reprendre vos opérations après la réduction de l'espace du tas. Utilisez alors cette méthode statique .
la source