2016-10-17 2 views
0

지도 뷰에서 API를 끌어 와서 차량 lat-lnt를 업데이트해야하는 프로젝트가 있습니다. 그리고 updateThread가 앱이 onStop 또는 onPause를 할 때 잠을 자고, OnResume을 할 때 일어나십시오. 또한 앱 라이프 사이클에서 절대 죽지 않습니다. 처음, 난 그냥 아래 사용하려고 (솔루션은 1) updateing합니다 :안드로이드 업데이트 스레드를 제어하는 ​​방법 앱 생활에서 깨어 난다

new Thread(new Runnable() { 
    @Override 
    public void run() { 
     while(true){ 
     //update-Vehicle-Looping 
     } 
    } 
}).start(); 

그러나 테스트 기간 동안, 내가 스레드가 자동으로 응용 프로그램은 그러나, 이동 중지 또는 onPause에 갈 때 사망하지 않는 것을 발견, 보장은 없습니다 그것은 죽지 않을 것입니다, 안드로이드는 쓰레드가 사용하고있는 리소스가 필요할 때까지 계속 실행합니다. 이것은 큰 리소스 비용을 들이지는 않을 것입니다.

그래서 대체 (Solution2) 윅 (whick)을 사용하여 스레드를 제어 할 수 있습니다.

HandlerThread thread = new HandlerThread("MyHandlerThread"); 
thread.start(); 
mHandler = new Handler(thread.getLooper()); 
mHandler.post(UpdateRunable); 
Runable UpdateRunable=new Runnable() { 
    @Override 
    public void run() { 
     while(IsRun){ 
     //update-Vehicle-Looping 
     } 
    } 
}; 

사용 IsRun는 응용 프로그램 리프트 사이클의 업데이트 스레드 awaker 또는 잠을 제어, 어떤 의미에서 (솔루션 2) 개선 (솔루션 1). 스레드에 의한 위험을 피할 수는 없습니다.

앱 라이프 사이클에서 업데이트 스레드를 제어 할 수있는 제안이 있습니까?

+0

'서비스'를 사용하십시오. – earthw0rmjim

답변

0

로직을 서비스로 옮겨야하므로 먼저 활동의 라이프 사이클에 종속되지 않습니다. 그렇게하면지도보기로 이벤트를 보내는 것을 멈출 수 있습니다. 서비스 바인딩을 사용하여 서비스에서 UI를 제어하십시오.

0

UI를 업데이트 할 때 Runable 인터페이스가있는 핸들러를 사용해야합니다. 활동 라이프 사이클의 진행 단계에있는 동안 앱이 다운 될 경우 처리기에 메시지를 게시해서는 안됩니다.

관련 문제