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

안드로이드 스레드 관련질문입니다 (일시 중지시 플래그 관리?)

0 추천

 

 

Runnable 선언


runnable = new Runnable() {
    @Override
    public void run() {
        while (true) {
            if (started) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                       //TODO
                     }
                });

                try {
                    Thread.sleep(1000); //10                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
};

 

스레드 시작

thread = new Thread(runnable);

started= true;

thread.start();

스레드 일시정지

if (thread.isAlive()) {
    started = false;
}

 

스레드 중지

started = false;
thread.interrupt();

 

이런식으로 스레드를 돌리다가 잠시 일시정지 할때는

if 안의 플래그인 started=false로 하고

재개할때 started=true로 바꿉니다

그리고 중지하면 thread.interrupt() 와 started=false;로 바꿉니다

 

문제는 스레드를 다시 실행하면 2개의 스레드가 동시에 돌아갑니다(기존의 스레드가 제거가 안되는 상황)

 

요기에서 while 안의 true때문에 문제일까요? 

 

구조의 문제일까요? 더 좋은 스레드 돌리는 방법이 있나요?

익명사용자 님이 2018년 11월 8일 질문

1개의 답변

0 추천
private Thread mThread;

private class Thread extends Thread {

     public void run() {

       try {

        while(isInterrupted()) {

        }

       catch(Exception e) {

       }

    }

  }

 

thread 시작

if(mThread != null) {

mThread.interrupt();

try {

mThread.join();

}catch(InterruptedException e) {

}

mThread = null;

}

mThead = new Thread();

mThread.start();

 

Thread 중지

if(mThread != null) {

mThread.interrupt();

try {

mThread.join();

}catch(InterruptedException e) {

}

mThread = null;

}

이렇게 해보세요.

while(true) 인 상황에서 if문의 flag를 바꾸는건 이상합니다.

while(flag) 이렇게 해도 될텐데요...
동동히히히히히 (360 포인트) 님이 2018년 11월 27일 답변
...