1

我想实现一个LocationListener. 检查了一些教程,发现了这个:

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

 // Acquire a reference to the system Location Manager
    LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

    // Define a listener that responds to location updates
    LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
          // Called when a new location is found by the network location provider.
          makeUseOfNewLocation(location);
        }

        public void onStatusChanged(String provider, int status, Bundle extras) {}

        public void onProviderEnabled(String provider) {}

        public void onProviderDisabled(String provider) {}
      };

    // Register the listener with the Location Manager to receive location updates
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);


}

但是事件监听器真的添加到onCreate方法中了吗?对我来说看起来很乱。将它们添加到单独的类并在其中创建类的实例是否更常见onCreate?我想知道这里的最佳做法。

谢谢!

4

2 回答 2

1

这实际上取决于您希望您的应用程序做什么。所以首先我同意在 onCreate() 中看起来很乱。假设您编写了一个小 init() 方法并从您的 onCreate() 中调用它,但还没有真正改变。唯一需要注意的是Activity LifeCycle。如果您注册接收位置更新,那么当您没有屏幕焦点时,您的 Activity 可能会获得更新。另一种选择是将寄存器移动到 onResume(),但是您需要在 onPause() 中取消注册。仅当您的应用当前在屏幕上时,才会获得更新。

于 2012-06-19T18:57:44.983 回答
1

你的方法几乎是正确的,但一步一步,没有“好的”理由LocationListener在分离的类中实现,但你应该实现你LocationListeneronCreate()方法和

requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

一般称为 in onResume()method 和removeUpdates()in onDestroy()method。

我建议您检查CommonsWareWeatherPlus的示例应用程序,我认为一切都会更清楚。

于 2012-06-19T19:01:22.627 回答