J'ai développé une application qui lit un fichier .csv, prend environ 16 points de latitude/longitude, et les trace sur une carte Google. Cependant, il semble que les points n'aiment pas tracer jusqu'à ce que je touche l'écran après environ une minute (je n'ai pas d'auditeurs établis) [c'est un problème distinct que quelqu'un peut peut-être répondre aussi bien].Google Map Lag sur Android
La tâche d'obtenir les points de latitude/longitude et de les tracer est mise dans une méthode asyncTask doInBackground. L'actualisation de l'état pouvant être tracé de la carte est effectuée dans la méthode onPostExecute de la AsyncTask. J'ai pensé que j'éliminerais le décalage puisque la méthode AsyncTask fonctionne pour moi. Quand le programme commence, il montre une carte vierge, j'attends environ 15 secondes et, si je touche la carte, les points vont se brancher. Cependant, la carte est insupportablement laggy à ce stade! Il faut l'application au moins 5 secondes pour répondre à mon interaction (c'est-à-dire zoom, défilement), et même alors, l'action est vraiment lente ...
Est-ce que quelque chose pense en connaître la cause?
est ici la plupart de mon code:
package net.learn2develop.GoogleMaps;
-- imports here
public class MapsActivity extends MapActivity
{
MapView mapView;
MapController mc;
//GeoPoint p;
//GeoPoint p2;
GeoPoint[] p99 = new GeoPoint[16];
public static String[][] bump = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapView);
LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);
@SuppressWarnings("deprecation")
View zoomView = mapView.getZoomControls();
mapView.setStreetView(true);
mapView.setSatellite(false);
zoomLayout.addView(zoomView,
new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
mapView.displayZoomControls(true);
mc = mapView.getController();
// Add points from ReadCsv.java
/** try/catch to-> async was cut from here */
new MapPoint().execute(bump);
mapView.invalidate();
}
public String[][] getArray(BufferedReader bufRdr) {
-- my method that I know works
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
class MapOverlay extends com.google.android.maps.Overlay {
@Override
public boolean draw(Canvas canvas, MapView mapView,
boolean shadow, long when)
{
super.draw(canvas, mapView, shadow);
// -- array of points---
for(int i = 0; i < bump.length; i++) {
Point screenPts99 = new Point();
mapView.getProjection().toPixels(p99[i], screenPts99);
Bitmap bmp99 = BitmapFactory.decodeResource(
getResources(), R.drawable.redpin);
canvas.drawBitmap(bmp99, screenPts99.x, screenPts99.y-44, null);
}
return true;
}
}
private class MapPoint extends AsyncTask <String[][], String, String> {
@Override
protected String doInBackground(String[][]... voidThisArray) {
String voidThisString = null;
try {
InputStream is = getAssets().open("Training4.csv");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
bump = getArray(reader);
if(bump == null){
setContentView(R.layout.deleteme);
} else {
for(int i = 0; i < bump.length; i++) {
String coordinates99[] = {bump[i][0], bump[i][1]};
double lat99 = Double.parseDouble(coordinates99[0]);
double lng99 = Double.parseDouble(coordinates99[1]);
p99[i] = new GeoPoint(
(int) (lat99 * 1E6),
(int) (lng99 * 1E6));
MapOverlay mapOverlay99 = new MapOverlay();
List<Overlay> listOfOverlays99 = mapView.getOverlays();
listOfOverlays99.add(mapOverlay99);
mapView.refreshDrawableState();
}
}
} catch (IOException e) {
e.printStackTrace();
}
return voidThisString;
}
@Override
protected void onPostExecute(String voidThisString) {
super.onPostExecute(voidThisString);
mapView.refreshDrawableState();
mapView.invalidate();
}
}
}
vérifier la autre réponse – Pratik