마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

파일 업로드 관련 메인쓰레드 경고 질문입니다. [closed]

0 추천

안녕하세요.

제가 앨범을 열어서 여러개 파일을 선택해서 서버에 업로드하는 것을 테스트 중에 있거든요.

그래서 네이티브로 2가지 방법을 테스트했는데 둘다 속도가 안나와서요 ㅠ

 

1. 선택한 앨범 사진들을 ActivityResult에서 File Path를 리스트에 저장했다가 Upload하는 클래스에 리스트 통째로 전달하고, 업로드 클래스에서 for문을 돌리기 (아래처럼 HTTP소스안에 들어가는 fileName만 반복)

dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file[]\"; filename=\"" + pathList.get(i) + "\"" + lineEnd);
dos.writeBytes(lineEnd);

2. 업로드하는 클래스는 하나의 File Path만 받고.. 이 클래스 자체를 for문 돌리기

for(int i=0; i<imagePathList.size(); i++){
    UploadMultiImage uploadImage = new UploadMultiImage(mContext, webView, imagePathList.get(i));

    String url = "UploadFile.php";
    try {
        String returnString = uploadImage.execute(url).get();
        if (returnString != null) {
            finish();
        }
    } catch (Exception e) {
        Log.e("error", e.toString());
    }
}

위에 코드들은 다 doInBackground로 돌구요(Async)

 

개인적으로는 오히려 후자가 더 빠르지 않을까 했거든요. 업로드 작업을 리스트 개수만큼 나눠서 쓰레드할당하는 것이 아닌가 싶어서..

결론적으로는 후자가 더 느린데 왜 그럴까요? 각각의 클래스 인스턴스를 선언해서 그런걸까요..?

 

어쨌든, 후자를 제외하더라도 전자또한 아래처럼 경고 문구들이 나오는데요.

Skipped 177 frames!  The application may be doing too much work on its main thread. 이런 문구들이 나오는데, 어느쪽 부분을 개선해 할까요??

 

첫 번째 방법을 개선해야할텐데 잘 모르겠습니다 ㅠㅜ

아시는분 계시면 조언 부탁드려요 (__)

질문을 종료한 이유: 구현
겸군님 (1,900 포인트) 님이 2017년 7월 24일 질문
겸군님님이 2017년 8월 24일 closed
...