2014-07-12 6 views
2

미안하지만, 꽤 혼란 스럽네요. reading this. 말하면, 하나의 액티비티가 있고 내부에 루퍼와 핸들러가있는 스레드를 구현하는 내부 클래스를 만들려고했습니다.Android 활동으로 Looper & Handler가 닫힙니 까?

내 질문은; 끝내면() 내 활동. 마지막으로 만든 Looper/Handler가 닫혀 있습니까?

활동이 이미 종료 된 상태에서 스레드가 계속 실행되고있는 것 같습니다.> 종료되었습니다.

+0

scheduleAtFixedRate와 함께 Timer를 사용해보십시오. –

답변

3

마침 후에는 루퍼 (및 스레드 자체)가 시스템에 의해 관리되고 필요하면 종료되므로 메인 스레드에 연결된 처리기는 신경 쓸 필요가 없습니다.

그러나 처리기가 시스템에서 관리하지 않는 별도의 루퍼 (예 : 사용자가 시작한 루퍼가있는 스레드)에 연결되어있는 경우 관련 스레드를 중지하지 않은 경우 처리기가 있습니다. 루퍼). 이것은 일반적으로 모든 스레드에 해당합니다. 스레드가 루퍼를 가지고 있다는 사실은 상황을 변경하지 않습니다.

여기서 중요한 것은 수동으로 시작한 모든 스레드를 중지하는 것입니다. 부가로

:

  • 당신은 항상 이클립스에서 실행중인 스레드를 확인할 수 있습니다. 디버거를 첨부하고 디버그보기로 이동하십시오. 모든 스레드가 나열됩니다.
  • HandlerThread을보세요.
+1

"finish() 호출 후"Main UI Thread "에 연결된 모든 핸들러는 이됩니다 (주 스레드의 Lopper가 종료되기 때문에). 이것은 ** 분명히 ** 사실이 아니기 때문에, 왜 Looper.quit()을 끝내겠습니까? – pskink

+0

네 말이 맞아, 나는 내 대답을 업데이트했다. – kupsef