视频上传消耗了android中的所有带宽

时间:2015-02-17 12:24:03

标签: android multithreading video android-asynctask android-service

我有一个在Android上传视频的功能。为此,我已经在服务中使用了整个代码,并使用AsyncTask在doInBackground()中调用上传视频功能。以下是上传视频的代码:

    private String uploadFile(String filePath, String proid, String procat) {

        String responseString = null;

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(Const_Url.FILE_UPLOAD_URL);

        try {
            AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
                    new ProgressListener() {

                        @Override
                        public void transferred(long num) {

                            publishProgress((int) ((num / (float) totalSize) * 100));
                        }
                    });

            File sourceFile = new File(filePath);

            // Adding file data to http body
            entity.addPart("image", new FileBody(sourceFile));

            entity.addPart("project_id", new StringBody(proid));
            entity.addPart("user_id", new StringBody(userid));
            entity.addPart("video_type", new StringBody("in_store"));

            Log.d("background file path ", filePath);
            Log.d("background project id", proid);
            Log.d("background project cat", procat);
            Log.d("background user id", userid);

            totalSize = entity.getContentLength();
            httppost.setEntity(entity);

            // Making server call
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity r_entity = response.getEntity();

            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode == 200) {
                // Server response
                responseString = EntityUtils.toString(r_entity);
            } else {
                responseString = "Error occurred! Http Status Code: "
                        + statusCode;
            }

        } catch (ClientProtocolException e) {
            responseString = e.toString();
        } catch (IOException e) {
            responseString = e.toString();
        }

        return responseString;

    }

因此 AndroidMultiPartEntity 会上传整个视频。

但问题是,如果在我尝试对服务器进行HTTP调用之间,那么它只是等到视频上传完成()。

理想情况下,它不应该等到很短的时间,但请尽快回复我。我认为视频上传服务会占用整个带宽,因此无法进行其他HTTP调用。

请提出一些解决方案。 TIA。

P.S。我试过了

Thread.currentThread()setPriority(从Thread.MIN_PRIORITY);

降低AsyncTask的优先级并提高其他http调用的优先级(Asynctask)。但徒劳无功。

1 个答案:

答案 0 :(得分:1)

对于遇到此问题的每个人,我都有一个解决方案。如果你想在服务的帮助下在后台上传一个非常重的文件(~500mb),请使用这个库: android upload service

我发现这非常容易集成,它还提供了许多其他功能,例如在通知栏中显示 progressbar