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

쓰레드 중지 후 다시 True로 변경해줬는데 동작하지 않습니다.

0 추천

안녕하세요, 쓰레드를 중지한 후 다시 동작하려고 하는데 동작하지 않습니다.

MediaPlay play시 threadOperate();

MediaPlay pause시 아래와 같이 isPlaying이 false여서 쓰레드가 멈추고 다시 MediaPlay를 start했는데... 쓰레드는 동작을

하지 않는데... 왜 그런가요??

flag도 사용해보고 다시 play 버튼을 눌렀을 때 thread.start();

java.lang.IllegalThreadStateException: Thread already started

오류가 발생합니다.

public void threadOperate(){
    System.out.println("isPlaying :" + mp.isPlaying());
    if(thread == null) {
        thread = new Thread(new Runnable() {
            @Override
            public void run() {
                while (mp.isPlaying()) {
                    try {
                        Thread.sleep(500);
                        System.out.println("thread");
                        Message msg = timeHandler.obtainMessage();
                        timeHandler.sendMessage(msg);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }
    thread.start();
}

public class TimeHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {
        String t = DateFormat.format("mm:ss", mp.getCurrentPosition()) + " / " + 
        DateFormat.format("mm:ss", mp.getDuration());
        int position = (int)(((float)mp.getCurrentPosition()/(float)mp.getDuration())*100);
        mCallback.seekbarInfo(t,position);
    }
}
androidO (260 포인트) 님이 2015년 5월 20일 질문

2개의 답변

+1 추천
 
채택된 답변
Thread 중지 후 재시작을 위해선 인스턴스를 새로 생성해야 된다고 알고 있습니다...
taejun (7,240 포인트) 님이 2015년 5월 20일 답변
androidO님이 2015년 5월 20일 채택됨
0 추천
쓰레드 내부의 while 문 밖에 로그를 찍어서 실제로 쓰레드가 종료가 되는지 먼저 확인을 해봐야 할 듯 싶네요

쓰레드 시작 부분에도 로그를 찍어 종료된 이후에도 쓰레드가 다시 실행 되는지 확인도 해봐야 할 것 같구요..

쓰레드가 종료가 안된다면 MediaPlay를 stop 해보시고 확인 해보시는 것도 방법이 아닐까 합니다.
익명사용자 님이 2015년 5월 20일 답변
...