storage access framework로 usb 저장소의 디렉토리를 선택해서 파일을 직접 다운로드받습니다.
받는건 문제가 없는데 도중에 otg핀을 강제로 해제하는 경우에 익셉션 처리를 하고 싶은데,
할 수있는 곳에 try catch를 걸어도 해당 다운로드 페이지가 종료되고 메인으로 빠집니다.
강종이라 그런지 ondestroy도 걸리지 않습니다.
asynctask안의 파일을 처리하는 doinbackgroud 부분에서
에러문을 걸어서 에러 result가 98일 때 다운로드를 중지하고
onPostExecute로 넘어가서 case 98: 까지는 가지는데요...여기서 멈추고 싶은데,
그냥 다운로드 액티비티 자체가 종료가 되어버리네요;
검은화면으로 전환되는거보니 강제종료현상같습니다.
아마 중간에 otg를 빼버려서 디렉토리?가 없어졌기 때문에 파일을 write할 수 없는 상황이라
에러가 난것은 확실한데요..
다큐멘트파일 uri를받고 for문을 돌려서 파일을 받는 부분입니다.
중간에 취소버튼을 누르면 isCancelled를 체크해서 return 5값을 주고 나가구요..
이 포문위에 try catch로 감싸서 Exception e로 토스트 띄우는 것도 했는데도
어디로 에러가 발생하는 것인지 계속 해당 액티비티가 중지 됩니다.
다운로드를 받지 않고 usb를 꼈다 빼면 이상이 없는데, 다운로드 중 usb를 빼면 강종현상이 발생하네요..
어떤 부분에서 정확히 try-catch를 처리해야할지 모르겠습니다..
for (;;)
{
try
{
read = is.read(buffer);
total += read; // 읽은 데이타 만큼 누적
int progress_temp = (int) ((double) total / myremains * 100);
publishProgress("" + progress_temp);
if (progress_temp % 10 == 0 && progress != progress_temp) {
progress = progress_temp;
}
if (read <= 0)
{
break;//종료한다.
}
fosFile.write(buffer, 0, read);
if (isCancelled()) {
// 다이얼로그에서 취소버튼을 눌렀을 때
Log.e("취소되었다", "취소되었다");
return 5;
}
}
catch(IOException e)
{
Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_LONG).show();
}
catch(Exception e)
{
Toast.makeText(getApplicationContext(), "2", Toast.LENGTH_LONG).show();
}
} // for
+
혹은, 파일을 모두 다운로드 받고나서 onPostExecute에서 다이얼로그를 띄워주고 난 뒤 바로
해제하면 비슷한 증상이 발생하는데요,
혹시 input,outstream등을 제대로 close하지 않으면 강종현사이 발생하는지요?
지금보니 close안한 변수들이 몇개 있어서요..일단은 작업끝난 후 무조건 close하려고 합니다.
+
혹시 몰라서 asynctask에서 onpre-doinback-onpost 기본 형식만 남기고
나머지 변수나 작업 코드들을 주석처리한 후, 실행해도 otg를 빼면 강종되는 현상이 발생합니다..