0

Google マップを使用して、等間隔で更新される複数の位置をマークしています。正常に動作するマーカーに問題はありません。しかし、マーカーを更新するとき、およびマップを拡大すると、マーカーが消え、マップにマークされるまでに長い時間がかかります。まるで人々が突然いなくなったかのように見えます。

カウンタ クラスを使用して、更新マーカー ワーカー スレッドを等間隔で呼び出しています。

カウンタークラス

     public class MyCount extends CountDownTimer{

    public MyCount(long millisInFuture, long countDownInterval) {
    super(millisInFuture, countDownInterval);
    }

    @Override
    public void onFinish() {
        new MapUpdater().execute("");
        resetTimer();                 
    }

    public void resetTimer()
    {
        counter = new MyCount(5000,1000);
            counter.start();
    }

    @Override
    public void onTick(long millisUntilFinished) {
    }

 }

MapUpdater 非同期タスク

     private class MapUpdater extends AsyncTask<String, Integer, String> {
   @Override
   protected void onPreExecute() {
      Log.d("ASYN", "STARTED");
      map.invalidate();
         itemizedoverlay.doPopulate();
      }
   @Override
   protected String doInBackground(String... params) {
       updatePosition();
       return "finished";
   }

   @Override
   protected void onProgressUpdate(Integer... values) {
      super.onProgressUpdate(values);
   }

   @Override
   protected void onPostExecute(String result) {
         super.onPostExecute(result);
         itemizedoverlay.doPopulate();
         Log.d("ASYN", "ENDED");
   }

}

updatePosition() メソッド

     public void updatePosition()
     {
    try{
                lat_coordinates[]= CustomHttpClient.executeHttpPost("http://10.0.2.2/return_coord.php", postParameters);
                lng_coordinates[]= CustomHttpClient.executeHttpPost("http://10.0.2.2/return_coord.php", postParameters);
     }catch (Exception e) {
            e.printStackTrace();
     }
            itemizedoverlay.removeAllOverlay();
            itemizedoverlay.doPopulate();

             try{
                for(int i=0; i<lat_coordinates.length; i++)
                 {
                     GeoPoint point = new GeoPoint((int)(lat_coordinates[i]*1E6),(int)(lng_coordinates[i]*1E6));
                     try {
                        addresses = geocoder.getFromLocation(lat_coordinates[i],lng_coordinates[i], 1);
                    } catch (NumberFormatException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        Log.d("update", "no format exception");
                    }catch (Exception e) {
                        Log.d("update", e.toString());
                    }
                     overlayitem = new OverlayItem(point,"title",addresses.get(0).getAddressLine(0));
                     itemizedoverlay.addOverlay(overlayitem);
                 }
             }catch(NullPointerException e){
                 e.getStackTrace();

             }
             finally{
                overlayList.add(itemizedoverlay);
         }

}

助言がありますか?アプリケーション全体を台無しにする更新には時間がかかります。

ありがとう

4

0 に答える 0