我正在尝试从Web服务器下载较大的.zip文件,但是我的行为很怪异,其说明是:

  • 我正在使用512MB SD卡在设备仿真器API级别3(版本1.5)中执行代码。我使用“删除数据用户”
  • 启动设备
  • conexion.getContentLength()的大小长度为7012725
  • 服务器地址为localhost(10.0.2.2),但是我尝试使用外部服务器,并且行为相同。我已仔细检查过是否可以通过网络浏览器下载文件。
  • 我在 list 文件中具有以下权限:

  • --
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    

    错误:
  • 它开始下载文件,我可以看到文本10、20、30、40、50,然后停止在60。
  • 一段时间后,仿真器将自行重启。

  • 解决方法:

    stacktflow中的
  • This问题正在设备中运行,不适用于我的情况。
  • 关于此wifi锁issue我所做的就是添加此权限“android.permission.WAKE_LOCK”,然后添加这段代码,但具有完全相同的行为:

    WifiManager.WifiLock wifilock;
    WifiManager管理器=(WifiManager)getSystemService(Context.WIFI_SERVICE);
    wifilock = manager.createWifiLock(“wifilock”);
    wifilock.acquire();
    ...
    wifilock.release();

  • 这是代码,它是在单独的线程中执行的:
    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();
        }
    
    }
    

    有什么线索吗?
    非常感谢你。

    更新并提供更多日志描述:


    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 ...
    

    谁能尝试我的代码并下载大小约为8MB的zip文件?它对您有用吗?

    最佳答案

    我刚刚在真正的设备中尝试过此代码,它可以完美运行。仿真器中一定有一些奇怪的东西。

    10-07 13:16