我正在Google地图中加载geojson文件。由于文件很大,我将文件分成小块并尝试使用并行处理加载它们。
for (int i = 1; i < 3; i++) {
new MyAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,i);
}
异步任务:
public class MyAsyncTask extends AsyncTask <Integer, Void, GeoJsonLayer> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected GeoJsonLayer doInBackground(Integer... integers) {
int i = integers[0];
try {
GeoJsonLayer layer = null;
switch (i) {
case 1:
layer = new GeoJsonLayer(mMap, R.raw.small_1, getApplicationContext());
break;
case 2:
layer = new GeoJsonLayer(mMap, R.raw.small_2, getApplicationContext());
break;
//other cases
}
return layer;
} catch (Exception e) {
return null;
}
}
@Override
protected void onPostExecute(GeoJsonLayer layer) {
super.onPostExecute(layer);
layer.addLayerToMap();
}
}
我在Emulator(Android 6.0,API 23)以及手机(Samsung GT N7100,Andriod 4.4.2,API 19)中运行它。加载地图并在其上显示图层会在模拟器中立即完成,而手机中需要一些时间(大约20秒)。模拟器中的核心数为2,而手机中的核心数为4。
Runtime.getRuntime().availableProcessors();
这是什么原因?手机应该比模拟器快吗?我还在清单文件中启用了硬件加速选项。有没有可以用于手机有效加载的选项?
我的模拟器详情如下
名称:Nexus_6P_API_23
CPU / ABI:Google API Intel Atom(x86)
路径:C:\ Users \ seasonal.android \ avd \ Nexus_6P_API_23.avd
目标:google_apis [Google API](API级别23)
皮肤:1440x2560
hw.dPad:没有
runtime.network.speed:完整
hw.accelerometer:是的
hw.device.name:Nexus 6P
vm.heapSize:64
skin.dynamic:是的
hw.device.manufacturer:Google
hw.gps:是的
hw.initialOrientation:Portrait
skin.path.backup:_no_skin
image.androidVersion.api:23
hw.audioInput:是的
image.sysdir.1:system-images \ android-23 \ google_apis \ x86 \
tag.id:google_apis
showDeviceFrame:没有
hw.camera.back:none
hw.mainKeys:没有
AvdId:Nexus_6P_API_23
hw.camera.front:none
hw.lcd.density:560
avd.ini.displayname:Nexus 6P API 23
hw.gpu.mode:auto
hw.device.hash2:MD5:9b564b60b1aebee32c73ded9daa1e620
hw.ramSize:768
hw.trackBall:没有
hw.battery:是的
hw.sdCard:是的
tag.display:Google API
runtime.network.latency:none
hw.keyboard:是的
hw.sensors.proximity:是的
disk.dataPartition.size:800M
hw.sensors.orientation:是的
avd.ini.encoding:UTF-8
hw.gpu.enabled:是的