1

내 안드로이드 응용 프로그램은 맵에있는 각 마커 (마커는 실제 장치의 위치를 ​​보여 주며 감시 할 장치가 10 개 미만)에 대한 원격 API에서 일부 json 데이터를 검색하고 상태를 설정합니다 특정 json 데이터에서 작동하는 규칙에 따라 마커의 색상을 변경하여 장치의 AsyncTask를 사용하여 json 데이터를 가져오고 장치의 상태를 변경합니다. 나는 ConcurrentHashMap<Device, Data>에 가져온 데이터를 유지합니다. 그래서, 나는 각 장치마다 하나씩 많은 asynctasks를 돌린다. 또한 사용자 정의 정보 창 (사실 사용자 정의 InfoWindowAdapter)을 사용하여 장치에 대한 더 많은 데이터를 표시합니다. 먼저 마커를 그려서지도 HashMap<Device, Marker>에 보관하십시오. asynctasks 데이터가 수집 일부는 클릭하면 InfoWindow는에 표시하는 데 사용됩니다 getInfoContents 메소드를 오버라이드 (override) InfoWindowAdapterAsyncTask refreshing google map api v2

new MyAsyncTask(markerMap).execute(device) 

내 사용자 정의 : 내가 사용 하나 하나 asynctasks 실행합니다. 모든 것이 정상적으로 작동합니다. 하지만 이제 10 초마다 마커를 새로 고침하고 싶습니다. 내지도를 새로 고침 할 수있는 권리/가장 좋은 방법 인 경우

Timer timer = new Timer(); 

timer.scheduleAtFixedRate(new TimerTask(){ 

    @Override 
    public void run() { 

     new MyAsyncTask(markerMap).executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, device1); 
     new MyAsyncTask(markerMap).executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, device2); 

    }}, 0, 10000); 

내 질문은 : 나는 다음과 같은 방법을 사용하여 그것을 위해 노력했다? 또는 AsyncTask 대신 Runnable을 사용해야하고 Runnable 내에서 json 데이터를 가져 와서 Marker를 업데이트 할 때 핸들러에 메시지를 보내야합니까? 한 가지 더 질문 : Timer 또는 ScheduledExecutorService를 사용해야합니까? 일부 StackOverflow 토론을 읽었지만 최종 권장 사항을 알지 못합니다. 감사.

+1

As Aspect with AsyncTask. 귀하의 경우에는 AsyncTask가 가장 좋습니다. –

+0

@ m-d 고마워요 – JackAW

+0

하지만 질문을 닫을 수 없습니다. asynctask는 주 스레드에서 시작해야합니다. 타이머는 별도의 스레드에서 실행됩니다. 따라서, 내 onPostExecute 메서드가 제대로 수행되는지 확신 할 수 없습니다. – JackAW

답변

0

마지막으로 내 문제를 해결했습니다. 잠시 후에 서브 프로그램이 RunnableScheduledThreadPoolExecutor (Asynctask 대신)을 사용하기 위해 프로그램의 일부를 다시 작성했습니다. 덧붙여서 나는 onResume() 메소드를 추가하여 을 사용하여 다시 시작했다 : mScheduledThreadPoolExecutor.scheduleAtFixedRate(runnable, 0, interval, TimeUnit.MILLISECONDS);