当我将其设为null时,为什么位置管理器仍在运行?

时间:2012-07-09 16:07:02

标签: android locationmanager locationlistener

在我的应用中,我使用两个位置管理器进行两项不同的活动。创建第一个活动时会创建第一个位置管理器。然后从第一个活动我创建第二个活动,创建第二个位置管理器。在第二个活动中,我试图在按下后退按钮时使用以下代码停止位置管理器更新:

@Override
public void onBackPressed() {
  lm.removeUpdates(ll);
  ll = null;
  lm = null;
  finish();
}

ll和lm在第一个和第二个活动中分别全局声明。 使用以下代码在第二个活动的onCreate中初始化ll和lm:

 lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
 ll = new myLocationListener();
 lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, ll);

问题是,如果我没有进入第二个活动并停止第一个活动的位置更新,那么我的Android中的GPS登录就会消失。但是,如果我进入第二个活动,使用后退按钮返回第一个活动,然后停止第一个活动的位置更新,那么GPS位置标志仍然存在。我正在使用相同的代码行停止第一个活动的更新:

lm.removeUpdates(ll);
ll = null;
lm = null;
当按下开始按钮时,

第一个活动中的ll和lm被初始化:

 public void startClick (View target){
      lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
      ll = new myLocationListener();
      lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, ll);
 }

代码中是否存在任何错误或是否存在任何逻辑错误?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以拥有LocationManager的单个实例,并将其存储在Application Context中。为此,您需要创建一个扩展Application的类。这是一个例子:

public class MyApplication extends Application 
{
   private LocationManager locationManager;

   @Override
   public void onCreate()
   {
     super.onCreate();

     //Initialize here the locationManager or initialize it in one of your
     //Activities. It is your choice.
   }

   //To retrieve the locationManager
   public LocationManager getLocationManger()
   {
      return locationManager;
   }

   //In case you want to initialize the locationManger in one of your Activities
   public void setLocationManager(LocationManager locationMangerIn) 
   {
       locationManager = locationMangerIn;
   }
}

不要忘记在MyApplication文件的android:name属性中添加对AndroidManifest.xml的引用。像这样:

<application android:icon="@drawable/icon" android:label="@string/app_name"
        android:name="com.your_package_name.MyApplication">

要访问您的locationManager实例,请调用以下代码:

LocationManger lm = ((MyApplication)activitysContext.getApplication()).getLocationManger();

要在Activity中实例化locationManager实例,请使用:

public void startClick (View target){
  LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

  //You can add the listener now or later. Again, your choice.
  ll = new myLocationListener();
  lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, ll);

  ((MyApplication)activitysContext.getApplication()).setLocationManger(lm);

}

希望有所帮助:)