2012-01-09 3 views
0

서비스와지도가 있습니다. mapview를 serivce에서 업데이트하고 싶습니다. (새로운 oerlays를 사용하면 매 15 초마다 말합니다.) 오류가 발생했습니다 : looper.prepare();를 호출하지 않은 스레드에서 핸들러를 생성 할 수 없습니다.업데이트 UI MapView 서비스

내 코드 :

private void startService() { 

    timer.scheduleAtFixedRate(new TimerTask() { 

    public void run() { 
    MyMap map = new MyMap(); // here is where app crashes...} 

}  
} 
+0

오류가 발생했습니다. –

답변

0

당신은 백그라운드 서비스의 UI 코드를 가질 수 없습니다. 서비스에서 실행중인 모든 것은 앱의 UI 스레드가 아닌 배경 스레드에서 실행됩니다. 즉, UI 변경을 할 수 없습니다. 그래서 당신은 오류가 발생합니다.

앉아서 생각하면 구조적으로 배경 서비스에 UI 코드를 사용할 이유가 없습니다. 지도 그리기는 순전히 전경 조작이며지도 활동이 해제되면 즉시 중단됩니다. 따라서 서비스에서 백그라운드 코드를 사용할 필요가 없습니다. 모든 오버레이 코드는 전경 맵 활동에 속합니다.

+0

백그라운드 서비스의 출력 매개 변수를 UI 쓰레드/액티비티로 전달하여 업데이트하는 방법은 무엇입니까? – santBart

+0

백그라운드 서비스에서 포 그라운드 활동으로 데이터를 보내는 것은 서비스에서 sendBroadcast를 호출하고 활동에 BroadcastReceiver를 구현하여 수행됩니다. http://stackoverflow.com/questions/4461832/android-broadcast-from-service-to-activity를 참조하십시오. 포어 그라운드 활동에서 데이터를 받으면 UI를 변경할 수 있습니다. – Theo