setContentView花费了太多时间

时间:2012-09-28 14:31:16

标签: android android-layout android-mapview mapactivity

我有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活动是简单的活动,只有四个按钮所以我相信它不能减慢这个活动。

1 个答案:

答案 0 :(得分:2)

你来自哪种观点?

之前的视图/活动/片段可能会减慢速度,而mapview也会很慢,尤其是当GPS试图同时获取锁定时

考虑加载对话框