2012-02-03 2 views
1

은 내가 응용 프로그램 시작시 시작하는 장기 실행 스레드가 : 그래서 유지 위이며,긴 실행중인 스레드 + 라이프 사이클

public class MyHelper extends Thread { 
    private AtomicBoolean mRun; 
    public void run() { 
     while (mRun.get()) { 
      ... 
     } 
    } 
} 

public class App extends Application { 
    private MyHelper mHelper; 

    public void onCreate() { 
     mHelper = new MyHelper(); 
     mHelper.start(); 
    } 
} 

우리는 어떤 비록 안드로이드에서 신호를 "응용 프로그램 종료"하지 않습니다 내 앱이 백그라운드에서 영원히 돌아가고 있습니까? 스레드를 종료 할 때를 알 수있는 좋은 곳이 없습니다.

사용자가 스택의 마지막 활동을 팝하는 경우 (뒤로 버튼을 눌러서) 스레드가 여전히 대기 상태 일지라도 내 응용 프로그램 인스턴스가 파괴됩니까?

감사

+0

여기 좀보세요 : http://stackoverflow.com/questions/680180/where-to-stop-destroy-threads-in-android-service-class – AlexS

+0

좋은 링크, 우리는 여전히 우리가 응용 프로그램이 "종료"되기를 원할 때 신호를받지 못하므로 스레드를 종료하는 방법을 알 수 없습니다. 한 사용자는 Thread.setDaemon (true)을 설정하도록 권장합니다. 그렇게 할 수있는 유일한 방법 인 것처럼 보이지만 약간 해킹 된 것처럼 보입니다. 다행히도 앱이 백그라운드로 작동 할 때 스레드에서 어떤 작업도하지 않고 있지만, 스레드가 일시 중단되고 앱이 살아 있어야한다는 신호로 작동하므로 OS가 앱을 종료 할 수 없다는 점만 걱정됩니다. ? – user291701

답변

0

는이 문제를 해결하려면, 당신은 당신들의 OnDestroy() 메소드() thread.interrupt 호출 할 수 있습니다.

귀하의 활동이 파괴 될 수는 있지만 반드시 귀하의 상황을 알 수 있습니다.

+0

Application 클래스에는 onDestroy() 메서드가 없습니다. – user291701

+0

활동과 혼동하는 좋은 점 – user1159819