0

朋友们,

我在 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();
    }

私人无效 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]);
                }

            }

        }


   }


}

现在当我按下后退按钮时,这个可运行的填充继续在我使用过的后端运行

AsyncTask.cancel() on backbuttonpressed 事件,但它仍然继续运行任何人指导我如何解决这个问题?

4

2 回答 2

0

您需要明确地为您的 populate runnable 提供一种方法来检测您不希望它完成。人们经常为此使用 Thread.interrupt() ,但由于您的代码不能完全控制 UI 线程,这在这里可能不是一个好主意。

于 2011-06-03T10:32:55.913 回答
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 循环。

于 2011-06-03T10:36:27.417 回答