2011-02-18 3 views
19

의심의 여지가 있습니다 ... 내 응용 프로그램에서 활동중인 사람이 있습니다. 내 활동이 여전히 작동하는 처리기를 파괴했지만. 응용 프로그램 프로세스가 아닌 다른 프로세스에서 실행되고 있습니까? 어떤 사람이 그렇게 일하는 이유를 설명 할 수 있습니까? 활동의 onDestroy 동안 처리기를 중지 할 수 있습니까?처리기를 중지하는 방법?

미리 감사드립니다.

+0

코드를 게시 한 경우 처리기의 세부 정보를 제공하면 도움이 될 것입니다. 또한 다른 스레드에서 핸들러를 인스턴스화합니까? – basilisk

답변

1

당신은 어딘가에 당신의 활동에 쓰레드가 있다는 것을 의미합니까? 스레드를 중지하는 것은 매우 쉽습니다. 해당 스레드에 대한 참조가 필요합니다. 같은 다음에 설명 된대로

if (mMyThread != null) { 
    mMyThread.interrupt(); 
} 

그것이

+0

덕분에 ... 많은 도움이되었습니다 ... – Taruni

25

을 도움이되기를 바랍니다 : 당신이 그것을 중지 할 때

private Thread mMyThread; 
mMyThread = new Thread ....... 

을하고, 단지 인터럽트 방법을 참조가 null가 아닌 경우 확인 전화

http://developer.android.com/reference/android/os/Handler.html

"각 처리기 인스턴스 문서

단일 스레드 및 해당 스레드의 메시지 큐와 연결되어 있습니다. "

활동을 마치려고하고 있습니다. 예 : onDestroy() 당신은 또한을 위해 시작된 실행 가능에 대한 콜백을 취소해야합니다

mHandler.removeCallbacks(previouslyStartedRunnable); 
당신이 할 수있는

심지어 활동이 활성화 동안 실행 가능한 이미 해고 된 경우 확인하지 않고.

UPDATE :

고려해야 할 두 가지 추가 경우가 있습니다

1) 당신은 실행 가능한, 예를 들어, 새로운 클래스를 생성하는 방법에 처리기를 구현 한이

private class HandleUpdateInd implements Runnable... 

보통 당신은 (실행 가능한 화재까지 변경 될 수 있습니다) 매개 변수의 현재 설정과 실행 가능한 지연을 시작하는 당신이 경우 그렇게 할 필요가있다. 을 취소하려면 인라인 호출 (주석에 대한 JPM 감사)

handler = new Handler() { public void handleMessage(Message msg) { ... } }; 

그런 다음 해당 메시지에 "무엇을"값을 정의 할 필요를 사용하는 경우)

mHandler.removeCallbacksAndMessages(HandleUpdateInd.class); 

2를 사용합니다. 나중에 취소해야하는 경우

handler.removeMessages(what); 

을 사용하여 작업을 수행 할 수 있습니다.

+1

활동에 대한 인라인 전화가 있으면 어떻게 할 수 있습니까? 즉 handler = new Handler() {public void handleMessage (Message msg) {...}}; – JPM

+0

메시지를 보낼 때 "무엇"값을 정의해야합니다. 그런 다음 나중에 참조하여 handler.removeMessages (what)를 요청할 수 있습니다. – Zelimir

0

저는 Zelimir의 답변을 좋아합니다. Android는 응용 프로그램 수명에 대한 제한을 정의하지 않고 응용 프로그램이 처음 시작될 때 생성되며 여러 Activities onCreate/onDestroy주기 사이에 살아있을 수 있습니다. 처리기는 응용 프로그램 단일 메인 이벤트 스레드/대기열과 연결되어 있으므로 활동은 Handler.getLooper(). quit()를 통해 수행 할 수 있지만 "중지"할 수는 없지만 ' 문제가 발생할 수 있으며 여기에 설명 된대로 전체 응용 프로그램을 종료 할 수도 있습니다 here).

아마 안드로이드 개념은 가능한 한 응용 프로그램 인스턴스를 재사용하는 것이므로, 활동 개발시 가장 중요한 관심사는 onDestroy 호출시 Activity 자원의 적절한 정리입니다. 정적 변수, 스레드, AsyncTasks 및 핸들러의 메시지/콜백은 걱정할 항목입니다.

관련 문제