0

友達、

私は asyncTask 内で次のコードを使用しています

public class AsycLoaderFromDbAndMapInjector extends 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]);
                }

            }

        }


   }


}

戻るボタンを押すと、この実行可能な populate は、使用したバックエンドで実行され続けます

backbuttonpressed イベントで AsyncTask.cancel() を実行しても、この問題を解決する方法を教えてくれますか?

4

2 に答える 2

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 に答える
0

populate ランナブルを完了させたくないことを検出する方法を明示的に提供する必要があります。これには Thread.interrupt() を使用することがよくありますが、コードが UI スレッドを完全に制御していないため、ここでは良いアイデアではないかもしれません。

于 2011-06-03T10:32:55.913 に答える