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

안드로이드 쓰레드가 종료가 되질 않습니다.

0 추천

현재 앱개발을 하고있는 초보입니다;

쓰레드가 종료가안되는 현상이 일어나고있습니다.

      setViewthread = new Thread() {
            public void run() {
                ss.out.println("175|");
                setViewthread.interrupt();
            }
        };
        setViewthread.start();

gameWaitng = new Thread() {
            public void run() {
                try {
                    while (ReadListen) {
                        msg = ss.in.readLine();
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                try {
                                    msgs = msg.split("\\|");
                                    protocol = msgs[0];
                                    switch (protocol) {
                                       //서버 프로토콜 처리
                                    }
                                }catch (NullPointerException e) {

                                }
                            }
                        });
                    }

                    }catch(NullPointerException e){

                    } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        };
        gameWaitng.start();

@Override
    public void onBackPressed() {
        gameClose = new Thread() {
            public void run() {
                    ss.out.println("400|");
                    gameClose.interrupt();
                }
            };
        ReadListen = !ReadListen;
            synchronized (gameWaitng) {
                try {
                    handler.removeMessages(0);
                    gameWaitng.interrupt();
                    gameWaitng.join(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            gameClose.start();
            Intent i = new Intent(getApplicationContext(),MainActivity.class);
            i.setFlags(i.FLAG_ACTIVITY_NEW_TASK);
            startActivity(i);
    }

    @Override
    protected void onStop() {
        super.onStop();
        if(gameWaitng != null && gameWaitng.isAlive()){
            gameWaitng.interrupt();
        }

    }

    Handler handler = new Handler();
}

위의 코드와같이 gameWaiting 쓰레드를 onBackPress가 호출되면 종료를 시키고싶은데

어떤짓을 해봐도 종료가 되질않습니다

어떻게 하면 좋을까요?

익명사용자 님이 2019년 6월 9일 질문

1개의 답변

0 추천
gameWaitng.interrupt();

를 호출하는데

해당 run()부분에서 interruppted() 함수를 이용해서 작동안되게 하세요.

음 예를 들면

while(!gameWaiting.isInterrupted()){

  쓰레드 돌리기..

}

Djleeee (13,180 포인트) 님이 2019년 6월 10일 답변
...