在onCreate中添加事件侦听器

时间:2012-06-19 18:52:46

标签: java android

我想实现一个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中创建该类的实例更常见吗?我想知道这里的最佳做法。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您的方法几乎是正确的但是一步一步,没有“好”的理由在分离的类中实现LocationListener,但您应该使用LocationListener方法实现onCreate()并且< / p>

requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
通常在onResume()方法和removeUpdates()方法onDestroy()中调用



我建议您通过 CommonsWare 检查WeatherPlus申请,我认为一切都会更清楚。