Android télécharger des fichiers volumineux

J'essaie de télécharger un grand fichier .zip à partir d'un serveur Web mais j'ai un comportement étrange, la description est:

  • J'exécute le code dans l'émulateur de périphérique, API niveau 3 (version 1.5) avec une carte SD de 512 Mo. Je lance le périphérique avec "Wipe data user"
  • La longueur de la taille de conexion.getContentLength () est 7012725
  • L'adresse du serveur est localhost (10.0.2.2), mais j'ai essayé avec un serveur externe et le comportement est le même. J'ai vérifié que je peux télécharger le fichier via un navigateur Web.
  • J'ai ces permissions dans le fichier manifeste:

  • Impossible de trouver un plug-in DRM
  • Android L SoundPool.load () de régression
  • Centre de l'image ToggleButton - sans texte
  • Android: incluant plusieurs paquets Java au manifeste
  • Gestion de gros Bitmaps
  • Android-Facebook SDK: Impossible de partager la photo, la boîte de dialogue ne s'affiche pas
  • <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 

    L'erreur:

    • Il commence à télécharger le fichier, je peux voir le texte 10, 20, 30, 40, 50 et puis il s'arrête à 60.
    • Au bout d'un moment, l'émulateur se redresse.

    Solutions de contournement:

    • Ce problème dans stackoverflow fonctionne dans l'appareil, pas dans mon cas.
    • À propos de ce problème de verrouillage wifi, j'ai ajouté cette permission "android.permission.WAKE_LOCK" et ensuite ce code, mais avec exactement le même comportement:

      WifiManager.WifiLock wifilock; WifiManager manager = (WifiManager) getSystemService (Context.WIFI_SERVICE); Wifilock = manager.createWifiLock ("wifilock"); Wifilock.acquire (); … wifilock.release ();

    Voici le code, qu'il s'exécute dans un thread distinct:

     private void downloadData(){ try{ Log.v(TAG, "downloading data"); URL url = new URL("http://10.0.2.2/1.zip"); URLConnection connection = url.openConnection(); connection.connect(); int lenghtOfFile = connection.getContentLength(); Log.v(TAG, "lenghtOfFile = "+lenghtOfFile); InputStream is = url.openStream(); File testDirectory = new File(Environment.getExternalStorageDirectory()+"/testDirectory/"); if(!testDirectory.exists()){ testDirectory.mkdir(); } FileOutputStream fos = new FileOutputStream(testDirectory+"/files.zip"); byte data[] = new byte[1024]; int count = 0; long total = 0; int progress = 0; while ((count=is.read(data)) != -1) { total += count; int progress_temp = (int)total*100/lenghtOfFile; if(progress_temp%10 == 0 && progress != progress_temp){ progress = progress_temp; Log.v(TAG, "total = "+progress); } fos.write(data, 0, count); } is.close(); fos.close(); Log.v(TAG, "downloading finished"); }catch(Exception e){ Log.v(TAG, "exception in downloadData"); e.printStackTrace(); } } 

    Quelque indice? Merci beaucoup.

    Mise à jour avec plus de description du journal:

    Bonjour Chris, j'ai essayé de découvrir ce qui se passait d'abord avec ce journal dans l'environnement Eclipse. Voici un peu plus de détails sur ce qui se passe (time-action), notez que j'ai changé le fichier pour le télécharger pour un autre ou pour faire plus de tests, mais les résultats sont tout à fait les mêmes:

     00:00 It starts downloading: V/iPhoto ( 853): downloading data V/iPhoto ( 853): lenghtOfFile = 7732809 V/iPhoto ( 853): total = 10 V/iPhoto ( 853): total = 20 V/iPhoto ( 853): total = 30 V/iPhoto ( 853): total = 40 V/iPhoto ( 853): total = 50 (round 00:05) -> Here it stops and the DDMS disconnects the device immediately 03:40 It finish the download (not always) and the device reboots on its own: I/Process ( 595): Sending signal. PID: 595 SIG: 3 I/dalvikvm( 595): threadid=7: reacting to signal 3 D/dalvikvm( 722): GC freed 2193 objects / 135808 bytes in 176 sec V/iPhoto ( 853): total = 60 I/dalvikvm( 595): Wrote stack trace to '/data/anr/traces.txt' I/ActivityManager( 595): Process com.google.android.apps.maps:FriendService (pid 778) has died. I/ActivityManager( 595): Process com.android.mms (pid 732) has died. V/iPhoto ( 853): total = 70 V/iPhoto ( 853): total = 80 V/iPhoto ( 853): total = 90 V/iPhoto ( 853): total = 100 V/iPhoto ( 853): downloading finished V/iPhoto ( 853): thread finish loading I/Process ( 595): Sending signal. PID: 595 SIG: 9 I/ActivityThread( 757): Removing dead content provider: settings I/ActivityThread( 748): Removing dead content provider: settings I/ActivityThread( 722): Removing dead content provider: settings I/ActivityThread( 700): Removing dead content provider: settings I/ServiceManager( 549): service 'package' died ... services dying... I/ServiceManager( 549): service 'wifi' died E/installd( 557): eof E/installd( 557): failed to read size I/installd( 557): closing connection D/qemud ( 560): fdhandler_event: disconnect on fd 11 D/qemud ( 560): fdhandler_event: disconnect on fd 12 E/vold ( 550): Framework disconnected I/Zygote ( 554): Exit zygote because system server (595) has terminated I/ServiceManager( 549): service 'simphonebook' died I/ServiceManager( 549): service 'isms' died I/ServiceManager( 549): service 'iphonesubinfo' died I/ServiceManager( 549): service 'phone' died D/AndroidRuntime( 949): D/AndroidRuntime( 949): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< ... and starting ... 

    Quelqu'un peut-il essayer mon code et télécharger un fichier zip avec une taille de 8 Mo? Cela fonctionne-t-il pour vous?

  • Comment puis-je modifier la couleur de la police de la liste de sélection dans un spinner?
  • Problème de fonctionnement de mon fichier de libération signé dans Eclipse
  • Comment puis-je activer javadoc pour la bibliothèque de support Android?
  • Le Widget de l'application n'apparaît pas dans la liste des widgets dans les appareils Honeycomb jusqu'à la redémarrage du lanceur
  • Dans la facturation d'application ne fonctionne pas après la mise à jour - Google Store
  • Définir l'arrière-plan de l'activité dans le thème en utilisant un style?
  • 2 Solutions collect form web for “Android télécharger des fichiers volumineux”

    Je viens d'essayer ce code dans un véritable appareil et ça marche parfaitement. Il doit y avoir quelque chose d'étrange dans l'émulateur.

    Le «redémarrage de l'émulateur lui-même» ne semble pas bon. Je vous recommande de démarrer logcat sur la machine dev et de se connecter à un fichier … c'est-à-dire sur un système de développement linux quelque chose comme

    Adb logcat | Fichier journal

    Ensuite, regardez le fichier journal et voyez ce que vous pouvez apprendre à savoir pourquoi il a redémarré.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.