activity.onPause并不总是被调用

时间:2010-09-29 17:41:08

标签: android

出于某种原因,当我的应用程序被放入后台时,并不总是调用onpause方法。这个或MyLocationOverlay没有正确禁用。

我的应用使用谷歌地图和MyLocationOverlay。启动应用时,我在MyLocationOverlay.enableMyLocation()方法中拨打onResume。在onPause方法中,我调用了MyLocationOverlay.disableMyLocation()。但是,当我按下主页键或后退键进入主屏幕时,GPS会保持运行,如状态栏顶部所示,带有gps图标。

编辑:它在模拟器或手机上都不起作用。

EDIT2:当我使用高级任务杀手杀死它时,gps图标才会消失。

EDIT3:onPause肯定被调用,因为我在其中放置了一个Log语句,但gps图标仍然存在。因此,看起来gps服务没有关闭,或者MyLocationOverlaydisableMyLocation()方法的错误。

这是我的清单文件和摘自我的活动:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res/com.tfb"
  package="com.tfb"
  android:versionName="1.2.2" android:versionCode="11">
<application android:icon="@drawable/globe_search" 
     android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar">
    <activity android:name=".activity.GarageSaleMap"
              android:label="@string/app_name"
              android:configChanges="keyboardHidden|orientation"
              android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable"
                   android:resource="@xml/searchable"/>
   </activity>
   <uses-library android:name="com.google.android.maps" />
<meta-data android:value="xxxxxxxxxxx" android:name="ADMOB_PUBLISHER_ID"/>
<meta-data android:value="true" android:name="ADMOB_ALLOW_LOCATION_FOR_ADS"/>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="8"/>
</manifest> 

活动

private void doMain() {
    mapView = (MapView) findViewById(R.id.mapview);
    MapView localMapView = mapView;

    localMapView.setBuiltInZoomControls(true);
    final MapController controller = localMapView.getController();

    localMapView.getZoomButtonsController().setAutoDismissed(false);

    lastSearchButton = (ImageButton) findViewById(R.id.lastSearchButton);
    lastSearchButton.setOnClickListener(new LastSearchButtonListener(this));

    GeoPoint point = new GeoPoint((int)(40.8138 * 1e6), (int)(-96.6831 * 1e6));//Lincoln, NE
    controller.animateTo(point);
    controller.setZoom(13);

    pushPinItemizedOverlay = getPushPinOverlay();
    localMapView.getOverlays().add(pushPinItemizedOverlay);

    new PopulateMapTask(this).execute(); 

    locationOverlay = new FixedMyLocationOverlay(this, localMapView);
    localMapView.getOverlays().add(locationOverlay);
}

@Override
protected void onPause() {
    locationOverlay.disableMyLocation();
    super.onPause();
}

@Override
protected void onResume() {
    locationOverlay.enableMyLocation();
    super.onResume();
}

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我不是肯定的,但我认为这可能来自我正在使用的admob广告插件。如果我启动我的应用程序,然后立即回家,gps图标不会消失。但是,如果我让应用程序运行一段时间并稍后返回并回家,则图标会消失。也许admob插件(我允许获取位置数据)阻止gps关闭,直到它获得gps超时或其他东西(我只在没有卫星可用的内部测试)。

我不确定何时会有时间,但我必须通过删除admob插件进行测试才能看到,但也许这会在此期间帮助其他人。

EDIT1 :更多信息,我发现如果gps图标闪烁,它仍然试图锁定某个位置。这是当我退出应用程序时,我的gps指示器不会消失。但是,如果图标稳定(表示位置锁定),则退出应用程序时图标会消失。似乎是超时问题。 (我现在没有一个单位来测试admob假设。)

答案 1 :(得分:0)

  

然而,当我点击主页键或后退键进入主屏幕时,GPS会保持运行状态栏顶部带有gps图标。

如果这是在模拟器上,那么模拟器就会出现问题。一旦出现GPS状态图标,它似乎永远不会消失。