gpt4 book ai didi

android - 如何取消正在进行的异步任务并在android中重新启动它

转载 作者:太空狗 更新时间:2023-10-29 16:15:17 25 4
gpt4 key购买 nike

我有一个 AsyncTask,每当相机在 Google map 中移动时都会调用它,因为我想根据 map 中心点的坐标从 Web 服务加载新数据。现在一切正常,但问题是每当用户快速移动 map 时,任务就会开始排队。结果,当用户停止移动 map 时,队列中的任务会继续加载旧数据,直到最后一个任务带有实际数据。

我的 AsyncTask 类:

private class GetOffersLocations extends AsyncTask<String[], Void, Boolean> {


@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
loader.setVisibility(View.VISIBLE);


}

@Override
protected Boolean doInBackground(String[]... params) {
// TODO Auto-generated method stub
[web api called in here and load the data against the center point (latlng)]
}

@Override
protected void onCancelled() {
// TODO Auto-generated method stub
super.onCancelled();
this.cancel(true);
}

@Override
protected void onPostExecute(Boolean result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
loader.setVisibility(View.GONE);
if (result) {
[drawing pins on map here]
}
}
}

在一个函数中,我在 map 的相机移动时调用了这个 AsyncTask:

private void showMarkers(String lat, String lng, String radius, int position) {
String[] latLng = { lat, lng, radius, String.valueOf(position) };
new getOffersLocations().execute(latLng);
}

现在这个函数在 OnCameraChangeListener 中被调用,当用户移动相机时这个异步任务被调用。所以,我想我正确地提出了我的问题,如果不正确请纠正我。等待帮助。谢谢。

最佳答案

您不能停止并重新启动一个 AsyncTask,但您可以通过调用取消它的执行

myGetOffersLocations.cancel(true);

这会中断执行,但是,您需要创建一个新的 AsyncTask 对象才能再次运行它,因此您可以这样做:

myGetOffersLocations.cancel(true);
myGetOffersLocations = new GetOffersLocations();

然后,再次运行它。

注意:确保您创建了一个对 AsyncTask 的对象引用,而不是像您在方法上所做的那样直接执行它。

替换这个:

new getOffersLocations().execute(latLng);

有了这个:

getOffersLocations myOffers = new getOffersLocations();
myOffers.execute(latLng);

关于android - 如何取消正在进行的异步任务并在android中重新启动它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29994971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com