如何定期触发getLoaderManager()。restartLoader()

时间:2014-12-27 16:35:16

标签: java android scheduled-tasks loader scheduledexecutorservice

我尝试“不断”从Web服务加载数据。我已经构建了AsyncTaskLoader来从Web服务加载数据,它工作正常。

现在我尝试每5秒钟启动一次加载器(在上一次加载器运行完成后等待5秒)。为此,我尝试使用ScheduledExecutorService,scheduleWithFixedDelay()看起来正确用于此用例。

现在我有这样的事情:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    scheduleTaskExecutor= Executors.newSingleThreadScheduledExecutor();

    scheduleTaskExecutor.scheduleWithFixedDelay(new Runnable() {
        public void run() {
            fireLoaderHandler.sendEmptyMessage(1);
        }
    }, 0, 5, TimeUnit.SECONDS);
}

private Handler fireLoaderHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        restartLoadet();
    }
};

private void restartLoadet() {
    getLoaderManager().restartLoader(0, null, this).forceLoad();
}   

@Override
public void onLoadFinished(Loader<List<Vehicle>> loader, List<Vehicle> data) {

    for(Vehicle vehicle : data) {

        Marker marker = mMarkerHashMap.get(vehicle);

        if(marker == null) {
            Marker m = mMap.addMarker(new MarkerOptions().position(vehicle.getLocation()).title(vehicle.getName()));
            mMarkerHashMap.put(vehicle, m);
        }

        else
        {
            marker.setPosition(vehicle.getLocation());
        }
    }
}   

这“工作”但是SchedulerExecutorService在加载程序完成并开始计算5秒延迟之前真的在等待吗?我觉得现在更像是火和忘记的东西?

总体来说,实现这个的正确方法是什么,定期激活加载器的restartLoader()?

更新

在代码示例中添加了onLoadFinished()。所以我使用loader来获取web api中的对象列表。这些对象用于绘制标记以进行映射。我还在mMarkerHashMap中存储了标记和我的车辆对象映射,因此当我在即将到来的加载器(web api)响应中获得相同的对象(具有更新的位置)时,我可以更新标记位置。

0 个答案:

没有答案