내 안드로이드 응용 프로그램은 맵에있는 각 마커 (마커는 실제 장치의 위치를 보여 주며 감시 할 장치가 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 토론을 읽었지만 최종 권장 사항을 알지 못합니다. 감사.
As Aspect with AsyncTask. 귀하의 경우에는 AsyncTask가 가장 좋습니다. –
@ m-d 고마워요 – JackAW
하지만 질문을 닫을 수 없습니다. asynctask는 주 스레드에서 시작해야합니다. 타이머는 별도의 스레드에서 실행됩니다. 따라서, 내 onPostExecute 메서드가 제대로 수행되는지 확신 할 수 없습니다. – JackAW