2011-04-12 5 views
2

응용 프로그램의 '기본'스레드에서 새 작업자 스레드를 생성하고 있습니다. 이러한 스레드는 응용 프로그램이 살아있는 한 계속해서 작동해야합니다. 그리고 응용 프로그램이 종료되면 모든 작업 스레드를 정리해야합니다 (그 의미가 무엇이든간에). 이것을하기 위해서, 라이프 사이클 방법이 유일한 장소입니까? 애플리케이션이 종료 될 때 수신되는 의도/알림이 있습니까? 그렇다면 필요한 정리를 수행하기 위해 그러한 의도/통지에 브로드 캐스트 리시버를 등록 할 수 있습니까?응용 프로그램 종료시 작업자 스레드 종료를 수행하는 데 필요한 후크

감사합니다.

Ashok.

Code Snippet: 

import android.app.Activity; import android.os.Bundle; 가져 오기 android.util.Log;

public class SomeThreadTest extends Activity { /** 활동이 처음 생성 될 때 호출됩니다. */ 스레드 t = null;

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    t = new Thread(new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      while (true) { 
       try { 
        Thread.sleep(15000); 
        Log.d("SomeThreadTest", "Thread wokeup now"); 
       } catch (InterruptedException e) { 
        Log.d("SomeThreadTest", "Thread interrupted exception called!"); 
        e.printStackTrace(); 
        return; 
       } 

       if (Thread.interrupted()) { 
        Log.d("SomeThreadTest", "I'm interrupted!"); 
       } 
      } 
     } 
    }, "TestThread"); 

    t.setDaemon(true); 
    t.start(); 
} 

}

답변

0

서비스 제공 업체와 비 데몬 메인 스레드가 종료하면 저를 죽일 것입니다 스레드를 알려줍니다 workerThread.setDaemon (true)를 호출하는 것이 좋습니다.

-1

안드로이드는 응용 프로그램이 자체 VM에서 실행되기 때문에 여기에서 도움이 될 수있는 데몬 스레드와 종료 훅을 가지고 있습니다.

데몬 스레드는 VM이 ​​종료 될 때 종료되고 VM이 종료하지 않습니다. 스레드를 만든 후 thread.setDaemon(true)을 호출하여 스레드를 데몬 스레드로 표시하십시오. 따라서 모든 작업자 스레드 데몬 스레드를 표시하면 VM은 종료시 해당 스레드를 처리합니다.

또는 종료 훅을 사용하여 VM이 종료 될 때 스레드를 직접 정리할 수 있습니다. 종료 훅을 등록하려면 Runtime.addShutdownHook(Thread)으로 호출하고 아직 시작하지 않은 스레드를 전달하십시오.

+0

포인터 주셔서 감사합니다. 나는 이것을 시도했지만 작동하지 않는 것 같습니다. 다음은 동일한 것을 보여주는 코드 스 니펫입니다. 내가 여기 뭔가 명백한 것을 놓치고 있다고 지적 할 수 있니? 나는 onCreate 라이프 사이클 메소드에서 다음을 수행하고 다른 메소드에서는 아무것도하지 않고있다. 코멘트 섹션에서 400 자 이상을 허용하지 않기 때문에 초기 질문의 일부로 코드 스 니펫을 게시하고 있습니다. 이 코드는 응용 프로그램에서 나온 후에도 '스레드 깨우기'를 인쇄하는 것으로 보입니다. –

+1

[Android API] (http://developer.android.com/reference/java/lang/Runtime.html#addShutdownHook (java.lang.Thread)) ** Android에서 애플리케이션 라이프 사이클에는 VM이 ​​포함되지 않습니다. 이 메소드를 호출해도 코드가 실행되는 것은 아닙니다. 대신 가장 적절한 라이프 사이클 알림 (Activity.onPause, 말하기)을 사용해야합니다. ** – caoxudong

관련 문제