AsyncTask刷新谷歌地图api v2

时间:2014-12-08 11:22:30

标签: android google-maps android-asynctask handler scheduledexecutorservice

我的Android应用程序从地图上出现的每个标记(标记显示真实设备的位置,要监视的设备少于10个)中从远程API检索一些json数据,并通过更改设置来设置设备的状态根据处理给定json数据的某些规则的标记的颜色。我使用AsyncTask来获取json数据并更改设备的状态。我在ConcurrentHashMap<Device, Data>中保留了数据。所以,我运行了一些asynctasks,每个设备一个。我还使用自定义信息窗口(实际上是自定义InfoWindowAdapter)来显示有关设备的更多数据。首先,我绘制一个标记,并将它们保存在地图HashMap<Device, Marker>中。我使用:

逐个执行asynctasks
new MyAsyncTask(markerMap).execute(device)

我的自定义InfoWindowAdapter会覆盖getInfoContents方法,其中一些asynctasks数据收集的方法用于在单击时显示在InfoWindow中。 一切正常。但现在我想每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);

我的问题是,这是刷新我的地图的正确/最佳方式吗?或者我应该使用Runnable而不是AsyncTask,并且在获取json数据以更新Marker时,在Runnable中向Handler发送消息?还有一个问题:我应该使用Timer还是ScheduledExecutorService?我已经阅读了一些StackOverflow讨论,但我不知道最终的建议。感谢。

1 个答案:

答案 0 :(得分:0)

最后我解决了我的问题。与此同时,我重写了部分程序,以便将ScheduledThreadPoolExecutor与子类Runnable(而不是Asynctask)一起使用。另外我添加了onResume()方法,我使用ScheduledThreadPoolExecutor重新启动mScheduledThreadPoolExecutor.scheduleAtFixedRate(runnable, 0, interval, TimeUnit.MILLISECONDS);