안드로이드 개발 질문/답변
(글 수 45,052)
메인 쓰레드에서 새로 쓰레드를 만들어서 back작업을 시켰습니다.
그런데 메인이 죽으면 새로 만들어서 쓴 쓰레드도 죽게 했다고 생각했는데
메인과 별개로 살아 있어서요 이런경우 어떻게 해야되는건가요?
private BackThreadKeepSession proc =null;
public void onCreate(Bundle savedInstanceState) {
...
proc = new BackThreadKeepSession();
proc.start();
}
class BackThreadKeepSession extends Thread{
public void run(){
while(true){
... 무한작업
}
}
}
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
proc = null; //UI Thread에 동기화
}
}
onDestory에 null로 처리하라고 하는건 책에서 봤구요
엔플북스 안드책에 나온방식인데 무한작업 Thread에서 메인이 죽어도 계속 축력되는 현상을 목격했습니다. ㅠ,ㅠ
종료시 모든 쓰레드가 같이 죽게 설계할려면요?
그런데 메인이 죽으면 새로 만들어서 쓴 쓰레드도 죽게 했다고 생각했는데
메인과 별개로 살아 있어서요 이런경우 어떻게 해야되는건가요?
private BackThreadKeepSession proc =null;
public void onCreate(Bundle savedInstanceState) {
...
proc = new BackThreadKeepSession();
proc.start();
}
class BackThreadKeepSession extends Thread{
public void run(){
while(true){
... 무한작업
}
}
}
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
proc = null; //UI Thread에 동기화
}
}
onDestory에 null로 처리하라고 하는건 책에서 봤구요
엔플북스 안드책에 나온방식인데 무한작업 Thread에서 메인이 죽어도 계속 축력되는 현상을 목격했습니다. ㅠ,ㅠ
종료시 모든 쓰레드가 같이 죽게 설계할려면요?
2010.12.28 13:48:16
run()함수내의 while(true) 부분을 while(flag)로 flag를 전역으로 하나 두신 후 onDestory()에서 flag를 false로 setting하시면 새로 생성하신 thread도 작업을 마친 후 종료는 됩니다.
2010.12.28 14:10:22
Primary Thread(Main)가 죽은때 Primary Thread에서 생성한 Thread(Secondary Thread)을 종료 하려면 Thread Start전에
proc.setDaemon(true);
proc.start();
을 해주면 되는것으로 알고 있습니다.
Primary Thread가 메모리 가 부족하거나, 여러 상황에서 죽을때 무조건 onDestroy()을 탄다고 보장을 할수가 없습니다. <-- 책에서 본듯 하네요..ㅎㅎ
도움이 되었는지 모르겠습니다.;;



