0
マップをAsynctaskで更新していました。今私はハンドラーで同じことをしたい。私は周りを見回しましたが、正確に何をすべきか理解できませんでした。 AsyncTaskはちょっと遅く、少し速くしたいです。ここでHandler経由でマップを更新するには?
は私がAsynctaskでやっているものです:
class DrawRouteTask extends AsyncTask<GeoPoint, Void, Polyline> {
private Exception exception;
private Polyline roadOverLay;
@Override
protected void onPostExecute(Polyline polyline) {
super.onPostExecute(polyline);
Log.i("AsyncTAsk ", " in post execute " + roadOverLay);
roadOverlay = roadOverLay;
// mOsmv.invalidate();
mOsmv.getOverlays().add(roadOverLay);
mOsmv.invalidate();
}
@Override
protected Polyline doInBackground(GeoPoint... geoPoints) {
try {
Log.i("AsyncTask", "Start Point >> " + geoPoints[0]);
Log.i("AsyncTask", "End Point >> " + geoPoints[1]);
RoadManager roadManager = new OSRMRoadManager(getContext());
ArrayList<GeoPoint> waypoints = new ArrayList<>();
waypoints.add(geoPoints[0]);
waypoints.add(geoPoints[1]);
Marker marker = new Marker(mOsmv);
marker.setPosition(geoPoints[0]);
marker.setPosition(geoPoints[1]);
marker.setTitle("Your Location ");
Log.i("AsyncTask ", "Drawable >> "+ ContextCompat.getDrawable(getContext(), R.drawable.pin));
marker.setIcon(ContextCompat.getDrawable(getContext(), R.drawable.pin));
mOsmv.getOverlays().add(marker);
road = roadManager.getRoad(waypoints);
roadOverLay = RoadManager.buildRoadOverlay(road);
roadOverLay.setColor(Color.RED);
return roadOverLay;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
任意の助けをいただければ幸いです。
メッセージは正確に何を表していますか? – KingintheNorth
メッセージは、アクティビティ間でデータを渡すために使用するインテント内のバンドルのようなものです。スレッドからデータ(int、Object obj)を取得してハンドラに送信すると、メインスレッド上で動作します。 – March3April4
あなたの場合、roadOverLayはmsg.objでなければなりません。その後、ハンドラはマップを更新するためにそれを使用できます。 – March3April4