본문 바로가기

Android

서버와 로컬 파일 사이즈 비교하기

안드로이드 sdk 개발을 진행하며 겪은 문제 리뷰


앱 실행 시 영상을 다운로드 받는 Thread를 동작 시키고, 버튼을 누를 시 영상을 재생시키는 간단한 내용이었다.
(물론 내부적으론 frequency와 재생 트래킹 등 많은 로직이 들어가 있으나... 겉으로 보여지는 부분은 매우 심플하다.)

위 내용에서 이슈가 있었는데 원인은 영상이 100% 다운로드 받지 않은 상태(로컬 내에 파일은 있으나, 온전하지 않은 파일일 때)에서 재생할 때 발생함!!


따라서 영상을 재생 할 때 로컬 내 파일과 서버 내 파일의 사이즈를 비교해야했다.


문제는 안드로이드 몇버전인지는 모르나 Network작업은 Thread를 사용하도록 정책을 변경하였다. 따라서 로컬에 있는 파일사이즈는 바로 확인이 가능했으나, 서버에 있는 파일은 Thread에서 체크해야했다.


만약 간단한 소스였다면.... AsyncTask의 onPreExecute()에서 로컬 파일 사이즈를 체크하고, doInBackground에서 서버에 접근 및 파일 사이즈 체크, onPostExecute에서 두 파일을 비교하여 재생했으면 간단했을 것인데....


문제는 소스가 거의 4천줄이 좀 넘다보니 낑겨맞추기가 어려워졌다.


그래서 생각해낸 다른 방법!

Thread로 서버에 접근하되, 비동기가 아닌 동기방식으로 처리하기로했다.


그래서 검색해본 바로는 Thread.join() 메소드이며, 해당 메소드는 Thread가 종료될 때 까지 기다린다.

Thread에서 서버파일사이즈를 체크할때 까지 기다리다보니, 동기방식으로 비교하여 분기처리할 수 있다는 사실~


Thread fileCheckThread = new Thread(Runnable(){

@Override

public void run(){

try{

//서버에 있는 파일 사이즈 체크

}catch(Exception e){

//예외처리

}

}

});


if(fileCheckThread!=null && fileCheckThread.isAlive()){

fileCheckThread.start();

fileCheckThread.join();    //Start 후 join처리를 해줘야 동작하더라; join만 하니까 아무것도 안함ㅋㅋㅋㅋ

}



빨리해결해서 기쁘다ㅜㅜㅜ