Android - 在调用方法之前保持递增延迟,直到用户停止交互

时间:2013-03-31 14:26:37

标签: android synchronization android-asynctask delay wait

我正在使用Google Maps V2,并且需要在用户移动地图时调用方法。 我正在使用.setOnCameraChangedListener(),每次移动地图时都会触发。从这个事件监听器,我可以调用我的方法。

问题在于,如果用户非常缓慢地移动地图,则会在一秒钟内多次触发事件。我从事件调用的方法是耗时的,我不希望它被频繁调用。

如何维持一个持续推迟延迟的计时器,直到用户真正停止与地图交互为止。这样,我的方法将在上次触发事件的300ms后被调用。

我已经尝试过,同步了,asyncTask(一遍又一遍地使用.cancel和.start),但似乎没有什么可以解决的。

1 个答案:

答案 0 :(得分:2)

将以下内容添加为字段:

private Handler cameraChangeHandler = new Handler();
private Runnable throttledRunnable = new Runnable() {
    @Override
    public void run() {
        // code that should run when user interaction has stopped for 300ms
    }
};

然后在onCameraChange中执行以下操作:

@Override
public void onCameraChange(CameraPosition cameraPosition) {
    cameraChangeHandler.removeCallbacks(throttledRunnable);
    cameraChangeHandler.postDelayed(throttledRunnable, 300);
}