Je télécharge un fichier assez volumineux sur la carte SD d'un périphérique Android (~ 60 Mo). Le téléchargement se passe bien, mais j'ai besoin de récupérer ce fichier dans son intégralité en mémoire. Je sais que c'est un gros morceau de mémoire pour un téléphone intelligent, mais je sais que mon appareil a plus du double de ce montant. Quoi qu'il en soit, mon problème actuel est que je reçois un OutOfMemoryError
lors de la lecture du fichier dans un tableau d'octets. Yat-il un moyen d'augmenter la mémoire allouée pour mon application, ou un moyen de "faux" référencer le fichier tout en conservant le fichier dans le stockage externe sans le charger dans la mémoire interne?OutOfMemoryError lors du chargement d'une grande quantité de données dans Android
Répondre
Chaque instance de machine virtuelle dans Android possède ce qu'elle appelle un budget VM. C'est essentiellement la quantité maximale de mémoire que l'application entière peut occuper et rien de plus. getRuntime(). maxMemory() vous donnera la taille du budget vm pour votre instance actuelle.
Je pense que le budget peut aller de 16 Mo (G1) à 48 Mo (Moto Xoom). Ces chiffres pourraient être différents alors que j'essaie de me souvenir de la tête.
Habituellement, pour quelque chose comme ça, vous lisiez les données en InputStream et traitiez les données au fur et à mesure que vous les lisiez, mais ne conserviez pas les données elles-mêmes.
S'il s'agit d'un bitmap. Vous pouvez utiliser ...
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4; // Divides the width and height each by 4 when reading the data in.
Bitmap bitmap = BitmapFactory.decodeFile(String "filePath", options);
Bitmap bitmap = BitmapFactory.decodeStream(InputStream "fileStream", options);
Il était de 16 Mo sur G1 ;-) –
Merci, mis à jour le commentaire. Je serais ravi d'avoir un tableau des classes de mémoire sur http://developer.android.com/resources/dashboard/screens.html spécifications vraiment bien par appareil. –
C'est assez simple: –
La réponse simple est: Vous devriez vraiment reconsidérer votre design actuel. Pourriez-vous expliquer pourquoi vous auriez besoin de charger 60 Mo de données en mémoire?
cette quantité de données rendrait une base de données plus attrayante, si c'est possible – Snicolas
C'est un fichier binaire propriétaire, et la bibliothèque qui m'a été donnée pour lire ce fichier veut que le tout soit un tableau d'octets ... donc je suis un peu limité à cet égard. –
C'est dur. Il y a d'autres considérations. Peut-être avoir un processus/thread séparé dédié au décodage peut-être avec une relation serveur/client. Cela signifie que le fichier doit être traité sur le serveur, puis téléchargé sur le client et diffusé ou visionné. Ceci est juste un exemple d'une refonte qui pourrait être nécessaire. Bonne chance. – Maurycy
- 1. Datagrid chargement grande quantité de données
- 2. Chargement efficace d'une grande quantité de données dans un fragment
- 3. App être écrasé lors du chargement de grande quantité de données dans UITableview
- 4. Chargement d'une grande quantité de données à partir de la base de données Sqlite dans Android
- 5. Comment gérer une grande quantité de données dans Android
- 6. mise en cache d'une grande quantité de données dans Android
- 7. Extrêmement grande quantité de données dans jos_session
- 8. L'indicateur d'activité n'apparaît pas lors du chargement d'une grande quantité de données depuis la base de données sqlite
- 9. OutOfMemoryError lors du chargement de ma grille avec des images
- 10. supprimer une grande quantité de données
- 11. Chargement grande image bitmap dans Android
- 12. Chargement d'une grande quantité d'enregistrements de XML vers HTML Table
- 13. iphone - chargement dynamique d'une grande quantité de texte et d'images
- 14. OutOfMemoryError lors du redimensionnement Bitmap
- 15. le code échoue lors de la récupération d'une plus grande quantité de données du service Web
- 16. Insérer une grande quantité de données dans la base de données sqlite android?
- 17. Pour insérer une grande quantité de données dans android Base de données SQLite
- 18. grande quantité d'images dans jquery DataTables table
- 19. Passer une grande quantité de données dans PHP
- 20. Meilleur moyen de charger une grande quantité de données dans Android sans attendre l'utilisateur
- 21. KSoap2 outOfMemoryError lors d'un appel Android
- 22. java.lang.OutOfMemoryError lors de l'enregistrement d'une grande quantité d'enregistrements
- 23. Stocker une grande quantité de données dans ASP.NET
- 24. Supprimer une grande quantité de données dans le serveur SQL
- 25. Grande quantité de données veulent afficher dans l'iphone
- 26. besoin d'afficher grande quantité de données à l'aide XMLHttpRequest
- 27. Comment afficher une grande quantité de données rapidement
- 28. FaultException lors de l'envoi d'une grande quantité de données dans WCF?
- 29. Android OutOfMemoryError
- 30. OutOfMemoryError Android
Vous ne pouvez pas pré-allouer la taille de la mémoire tampon (dans 'InputStream')? Peut-être essayer ça. 60 Mo est beaucoup pour toute application à avoir sans collecte des ordures. Je m'attendrais à Android à louer autant de données à tout moment dans l'application. Vous pouvez également essayer de séparer les données dans un tableau de tableaux d'octets. – hwrdprkns
Votre question n'est pas assez complète. Quel type de données essayez-vous de gérer? –