我有MapView,TextView,3 ImageButton和1个简单Button的活动。首次调用此活动的setContentView需要花费太多时间(接近10秒)。这是我的观看代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
android:padding="0px" >
<com.google.android.maps.MapView
android:id="@+id/map_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/txt_route_info"
android:apiKey="MyAPIKeyGoesHere"
android:clickable="true"
android:enabled="true" />
<Button
android:id="@+id/btn_accept"
android:layout_width="fill_parent"
android:layout_height="55dp"
android:layout_alignParentBottom="true"
android:layout_margin="2dip"
android:enabled="false"
android:text="@string/btn_accept" />
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:gravity="center_horizontal"
android:padding="0px" >
<TextView
android:id="@+id/txt_route_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal" />
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textEdit"
android:layout_centerHorizontal="true"
android:gravity="center_horizontal"
android:padding="0px" >
<ImageButton
android:id="@+id/btn_zoom_in"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:contentDescription="@string/btn_zoom_in_content_descriptor"
android:src="@drawable/zoom_in" />
<ImageButton
android:id="@+id/btn_zoom_out"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:contentDescription="@string/btn_zoom_out_content_descriptor"
android:src="@drawable/zoom_out" />
<ImageButton
android:id="@+id/btn_my_location"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:contentDescription="@string/btn_my_location_content_descriptor"
android:src="@drawable/my_location" />
</LinearLayout>
</RelativeLayout>
我不知道什么可以减缓活动负荷这么多。我读过这个主题:setContentView taking long time (10-15 seconds) to execute 但我仍然无法解决我的问题。如果你能给我任何暗示或想法,我会很感激。
更新
来自我的活动代码的onCreate方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.google_map_view);
mapView = (MapView) this.findViewById(R.id.map_view);
mapView.setBuiltInZoomControls(false);
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
if (locationManager == null) {
this.finish();
return;
}
final MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this, mapView);
myLocationOverlay.disableCompass();
myLocationOverlay.enableMyLocation();
acceptBtn = (Button) findViewById(R.id.btn_accept);
final View.OnClickListener acceptBtnListener = new AcceptBtnListener();
acceptBtn.setOnClickListener(acceptBtnListener);
final ImageButton zoomInBtn = (ImageButton) findViewById(R.id.btn_zoom_in);
final ImageButton zoomOutBtn = (ImageButton) findViewById(R.id.btn_zoom_out);
myLocationBtn = (ImageButton) findViewById(R.id.btn_my_location);
zoomInBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mapController.zoomIn();
}
});
zoomOutBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mapController.zoomOut();
}
});
myLocationBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final GeoPoint myLocation = myLocationOverlay.getMyLocation();
if (myLocation != null) {
mapController.animateTo(myLocation);
mapController.setCenter(myLocation);
} else {
progressDialog = ProgressDialog.show(GoogleMapActivity.this, "", getString(R.string.dlg_progress_obtaining_location), true);
}
}
});
mapController = this.mapView.getController();
mapController.setZoom(MAP_ZOOM_LEVEL);
final Intent intent = getIntent();
isInRouteMode = intent.getBooleanExtra("isRouteMode", false); //activity started to display route?
if (isInRouteMode) {
final String fromAddress = intent.getStringExtra("fromAddress");
final String toAddress = intent.getStringExtra("toAddress");
final GeoPoint fromPoint;
final GeoPoint toPoint;
try {
fromPoint = getGeoPointByAddressString(fromAddress, this);
toPoint = getGeoPointByAddressString(toAddress, this);
} catch (IOException e) {
Toast.makeText(this, getString(R.string.err_geocoder_not_available),
Toast.LENGTH_LONG).show();
Log.e(CLASSTAG, e.getMessage());
return;
}
new RouteCalculationTask().execute(fromPoint, toPoint);
} else { //activity started to select address
addressItemizedOverlay = new AddressItemizedOverlay(getResources().getDrawable(R.drawable.red_pin));
mapView.getOverlays().add(addressItemizedOverlay);
mapView.getOverlays().add(myLocationOverlay);
mapView.setOnTouchListener(new MapOnTouchListener());
}
}
Priveous活动是简单的活动,只有四个按钮所以我相信它不能减慢这个活动。
答案 0 :(得分:2)
之前的视图/活动/片段可能会减慢速度,而mapview也会很慢,尤其是当GPS试图同时获取锁定时
考虑加载对话框