AsyncTask 가 은근히 생각해줘야될 부분이 많은데 아직 멀티쓰레드개념이 제대로 안 잡혀서 그런지 어렵네요
지속적으로 여기 관련되어 질문을 올리는 것에 대해서 대단히 죄송스럽게 생각됩니다.
실질적으로 AsyncTask 를 사용하게 된 계기가, 웹에 존재하고 있는 Text와 mp3 파일을 sdcard에 저장을 하고
그것을 바탕으로 하여 Textview와 mp3를 재생하기 위함입니다.
하지만 안드로이드에서 웹에 있는 자료를 접근하기 위해서 AsyncTask를 사용하게 되었습니다.
AsyncTask가 끝나고 나서 이제 mp3 파일을 재생을 해야하는데
GetContentsBackGround back = new GetContentsBackGround(this,title);
back.execute("http://203.255.3.248/test2.php?title=");
Thread.sleep(10);
title = title.replace("[*:/?*<>]{1}", "") + ".mp3";
String absolutePath = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
String path = absolutePath + "/todayWord/" + title;
MediaPlayer mMediaPlayer = new MediaPlayer();
try{
FileInputStream fis = new FileInputStream(path);
FileDescriptor fd = fis.getFD();
mMediaPlayer.setDataSource(fd); // path 에 mp3 파일 경로
mMediaPlayer.prepare();
mMediaPlayer.start();
}catch(Exception e){
System.out.println(e);
}
다음과 같이 하였을 경우 AsyncTask 가 백그라운드로 돌아가고, 바로 mp3 부분이 실행으로 넣어가는 바람에 제대로 재생이 안되는 부분이 있습니다. 이러한 경우 어떤식으로 AsyncTask 가 끝났는지 체크를 하고 다음으로 넘어가는지 궁금합니다
AsyncTask 는 작업(doInBackground())이 끝나면 자동으로 onPostExecute() 메서드를 호출합니다.
따라서 onPostExecute() 메서드를 오버라이드 하셔서 백그라운드 종료후 하셔야될 작업을 넣어주시면 됩니다.
말씀하신 노래 재생 부분을 넣어주시면 되겠습니다.
onPostExecute() 에는 현재 Progress 를 통하여 mp3 file이 다운을 보여주는 부분을 구현하였습니다.
그리고 mp3 재생에 관련된 소스들을 onPostExecute()에 넣기에는 무리가 있어 보여서 main 부분에서 새로운 클래스나 함수를 구현하여서 처리를 할려고 하는 부분인데, 힘이 들까요?
답변 감사드립니다. 객체지향을 좀 멀리했더니 개념이 많이 헷갈렸네요. 이제 문제는 onPostExecute() 에서 mp3를 재생시켰고 잘 나오는 것을 확인을 하였습니다.
하지만 프로그램을 종료를 하여도 mp3 가 계속하여 재생되는 문제가 있더군요. 이 경우 문제가 AsyncTask 가 계속 작동하고 있어서 이런 현상이 발생하는 것인지 아니면 mp3 재생해주는 클래스에서 문제가 있는것인지 애매모호하네요
이 부분에 대해서 검색어나, 처리 방법에 대해서 알려주시면 감사합니다




AsyncTask 클래스에서 onPostExecute 메소드를 오버라이드 하시면 됩니다.