ハニカムでたくさん遊んだ後、NetworkOnMainThreadの問題についてHTTP関連の作業を行うとわかります。httpへの呼び出しを別のAsynTaskに入れることでこれに対処していましたが、これはうまく機能しているようです...
今、私はWMSレイヤーをフェッチして(https経由で)ロードしてマップに配置しようとしています。これは問題なく機能していますが、オーバーレイで描画が呼び出されるたびに(マップを移動するたびに)、別の操作を行っていたため、AsyncTaskの使用方法はそれをカットしていません。
new getWmsAsync().execute();
これは、しばらくすると最大スレッド数があったことを意味します。
これに対する正しい修正が何であるかはわかりません。または、私がどのように失敗したかを知っていた方法でそれを行った後、これを正しい方法で設計する方法。何が欠けていますか?別のスレッドでhttpsリクエストを取得する方法はありますか(マップを移動するたびに実行する必要があると思います)。
元の呼び出し:
WMSOverlay extends Overlay
クラスで:
@Override
public void draw(Canvas canvas, MapView mapView,
boolean shadow) {
super.draw(canvas, mapView, shadow);
mCanvas=canvas;
wmsclient = new WMSLoader(mapView.getContext());
cornerCoords = MapUtils.getCornerCoordinates(mapView.getProjection(), canvas);
//new getWmsAsync().execute();
Paint semitransparent = new Paint();
semitransparent.setAlpha(0x888);
mCanvas.drawBitmap( , 0, 0, semitransparent);
}
しかし、私のwsmClient.loadMap
中にはhttp呼び出しがあるので、上記のNetworkOnMainThreadで停止します。私の修正はこれでした:
@Override
public void draw(Canvas canvas, MapView mapView,
boolean shadow) {
super.draw(canvas, mapView, shadow);
mCanvas=canvas;
wmsclient = new WMSLoader(mapView.getContext());
cornerCoords = MapUtils.getCornerCoordinates(mapView.getProjection(), canvas);
new getWmsAsync().execute(); //too many threads here...
}
private class getWmsAsync extends AsyncTask<Void, Void, Bitmap>{
@Override
protected void onPostExecute(Bitmap image) {
Paint semitransparent = new Paint();
semitransparent.setAlpha(0x888);
mCanvas.drawBitmap(image, 0, 0, semitransparent);
this.cancel(true);
}
@Override
protected Bitmap doInBackground(Void... params) {
// TODO Auto-generated method stub
return wmsclient.loadMap(mCanvas.getWidth(), mCanvas.getHeight(), cornerCoords[0], cornerCoords[1], null);
}
}
私がそのように使用すると、.execute()
私はこのエラーになります:
08-23 17:01:05.520: ERROR/AndroidRuntime(5436): java.util.concurrent.RejectedExecutionException: Task android.os.AsyncTask$3@41147c88 rejected from java.util.concurrent.ThreadPoolExecutor@40880c00[Running, pool size = 128, active threads = 127, queued tasks = 10, completed tasks = 59]