3

我有 MapView、TextView、3 个 ImageButton 和 1 个简单按钮的活动。首次为此活动调用 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 需要很长时间(10-15 秒)来执行 ,但我仍然无法解决我的问题。如果您能给我任何提示或想法,我将不胜感激。

更新:

我的活动代码中的 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());
    }
}

以前的活动是只有四个按钮的简单活动,所以我相信它不会减慢这项活动的速度。

4

1 回答 1

2

你来自什么样的观点?

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

考虑加载对话框

于 2012-09-28T14:33:56.587 回答