朋友,
我在asyncTask中使用以下代码
公共类AsycLoaderFromDbAndMapInjector扩展了AsyncTask {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(Void... arg0) {
Log.d("Asynctask", ""+arg0);
boolean show = false;
if(db == null)
db = new dbHelper(me);
ATM results = null;
try {
results = db.getAtmsBySelectedBanks(atm.getSelectedBankList(), selectedCity);
if (results != null) {
LoopThroughEachATMToDisplayOnMap();
}
return show;
}
@Override
protected void onPostExecute(Boolean result) {
stopProgress();
}
private void LoopThroughEachATMToDisplayOnMap() {
Drawable drawable = getResources().getDrawable(
R.drawable.marker);
itemizedOverlay = new MyItemizedOverlay(drawable, mapView);
for (int i = 0; i < atm.getAtmList().size(); i++) {
ATM a = atm.getAtmList().get(i);
if (a != null) {
int[] coordinates = getIntCoordinates(a
.getCoordinates());
if (coordinates != null) {
GeoPoint point = new GeoPoint(coordinates[0],
coordinates[1]);
OverlayItem overlayItem = new OverlayItem(
point, a.getBankName(), a.getAddress()
+ "@@" + a.getPhone() + "@@"
+ a.getWebAddress() + "@@"
+ a.getCoordinates());
itemizedOverlay.addOverlay(overlayItem);
System.out
.println("coordinates-------------------------"
+ i + " "
+ coordinates[0]
+ ","
+ coordinates[1]);
}
}
}
}
}
现在当我按下后退按钮时,这个可运行的populate继续在我使用的后端运行
关于backbuttonpressed事件的AsyncTask.cancel()但是它仍在运行任何一个指导我如何解决这个问题?
答案 0 :(得分:0)
您需要明确地为您的populate runnable提供一种检测您不希望它完成的方法。通常人们会为此使用Thread.interrupt(),但是因为你的代码没有完全控制在这里可能不是一个好主意的UI线程。
答案 1 :(得分:0)
试试这个,
private ATM results = null;
@Override
protected Boolean doInBackground(Void... arg0) {
Log.d("Asynctask", ""+arg0);
boolean show = false;
if(db == null)
db = new dbHelper(me);
ATM results = null;
try {
results = db.getAtmsBySelectedBanks(atm.getSelectedBankList(), selectedCity);
if (results != null) {
publishProgress(0);
}
return show;
}
@Override
protected void onProgressUpdate(Integer... values) {
if (results != null) {
LoopThroughEachATMToDisplayOnMap();
}
}
在LoopThroughEachATMToDisplayOnMap()中设置一个标志,以便在按下后退按钮时停止for循环。
即,
检测何时按下后退按钮,设置条件变量。
在循环方法中有一个条件变量会破坏for循环。