小弟在开发一个有大量照片上传需求的程序,照片的质量为最高,像素为800万。
在这样的情况下,经常会报 XXXXXXX byte external allocation too large for this process VM won't let us allocate XXXXXXX bytes的错误,还有每张图片有2.8M左右,上传速度特别慢(WEBSERVICES + SOAP),请问大神们做这样的程序,都是如果处理上面出现的问题的呢?

解决方案 »

  1.   

    1.检查网络状态,如果是3G就提示用户当前操作会消耗大量流量。
    2. 试试下面代码
    HttpClient httpClient = new DefaultHttpClient();HttpPost httpPost = new HttpPost(url);MultipartEntity multiPart = new MultipartEntity();
    multiPart.addPart("my_picture", new FileBody(new File(IMG_URL)));httpPost.setEntity(multiPart);
    HttpResponse res = httpClient.execute(httpPost);
      

  2.   

    小弟不才,上面的代码是上传图片的代码吗?
    我们公司用的是WEBSERVICES,用BYTE做为参数传输
      

  3.   

    还有,如果休眠,待机的时候,3G网络是不是会断开?这个有办法解决吗?网上没看到有说,都是说设置WIFI永不休眠的
      

  4.   

    直接读文件字节流,分段传给webservice,服务器将其缓存,最后发个结束标志位告诉服务器可以组装文件了。
      

  5.   

    看你的错误信息,大概是因为一次传给webservice的字节数太大了。你一次不要传整个文件,把一个文件切分成比如500K一段,分几次传上去,然后在服务器端组合还原文件。如果服务器端你改不了,它又不支持大字节传送,那你只能哭了。
      

  6.   

    文件字节流,不会有类似out of memory这样错误吗?就是内存不够用
      

  7.   

    原来没考虑,现在在考虑,呵呵FTP的方式,不了解,难道就不用加载大量的内存了吗?
      

  8.   

    一次性上传那么大的东西必然是oom啦,分段上传仿照握手原理,有个交互过程,虽然慢但是不至于挂掉。否则怎么都会内存爆了的。