【问题标题】:server takes too much time to upload the multiple images in android服务器需要太多时间来上传 android 中的多个图像
【发布时间】:2014-06-23 10:50:07
【问题描述】:

我的 android 应用正在服务器上上传单个以及多个图像。 如果我上传单张图片则没有问题,但如果我选择多张图片(8-10) 上传到服务器需要很多时间。

请帮帮我。

class asyncImageUploader extends AsyncTask<String, Integer, String>{

    String methodName = "UploadImageWithDetail" ;
    ProgressDialog progressDialog;


    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();


        progressDialog = LoginActivity.createProgressDialog(CaseDetailsActivity.this);
        //progressDialog = new ProgressDialog(CaseDetailsActivity.this);
        //progressDialog.show();

    }

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub

        for(int i = 0 ; i<arrImagePath.size() ; i++)
        {

             try{

                    Options options = new BitmapFactory.Options();
                    options.inSampleSize = 2;

                    Bitmap bitmap = BitmapFactory.decodeFile(arrImagePath.get(i), options);
                    bitmap = Bitmap.createScaledBitmap(bitmap, 600, 600, true);

                    ByteArrayOutputStream buffer = new ByteArrayOutputStream(bitmap.getWidth() * bitmap.getHeight());
                    bitmap.compress(CompressFormat.PNG, 100, buffer);
                    imageByteStr = Base64.encodeToString(buffer.toByteArray(), Base64.DEFAULT);

                }catch(Exception e){
                    e.printStackTrace();
                }

            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(6);
            nameValuePairs.add(new BasicNameValuePair("loginID",sharedPreferences.getString("username", "")));
            nameValuePairs.add(new BasicNameValuePair("loginKey", sharedPreferences.getString("password", "")));
            nameValuePairs.add(new BasicNameValuePair("HostCompID", sharedPreferences.getString("hostID", "")));
            nameValuePairs.add(new BasicNameValuePair("LoginCompID",  sharedPreferences.getString("logID", "")));
            nameValuePairs.add(new BasicNameValuePair("caseID", caseId));
            nameValuePairs.add(new BasicNameValuePair("byteImageString", imageByteStr));

            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(RxOfficeUtilities.URL+methodName);

            try {

                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = httpclient.execute(httppost);

            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);

        progressDialog.dismiss();

    }

【问题讨论】:

  • 但是你的问题是什么......这很明显,如果上传 1 张图片需要 2 秒,那么 10 张图片将需要大约 14 - 20 秒或更长时间......
  • @Rohit 看,单张图片需要 2-3 秒,但上传多张需要 2-3 分钟,进度对话框继续...
  • 请详细介绍一下服务器。您没有透露图像必须如何保存在服务器上的名称。

标签: android performance optimization file-upload android-gallery


【解决方案1】:

我想说,与其在每个循环中创建一个 http 客户端,不如尝试使用一个 http 客户端。 还要在每个循环的 关闭缓冲区或尝试重置它。

【讨论】:

  • 工作正常,但一个问题仍然是需要时间(比第一个代码更好。)
  • 你试过记录时间吗?在您的代码中放置不同的时间点,看看哪个时间点平均需要更长的时间。顺便说一下,尝试重用你的一些对象,而不是创建一个新对象。 GC 有时会显着减慢您的应用程序
  • 确实如此。专门用于位图。重用它和/或尝试bitmap.recycle()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
  • 2014-04-27
  • 2017-02-21
  • 2014-01-23
相关资源
最近更新 更多