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

あなたのアプローチはほぼ正しいですが、段階的にLocationListener、分離されたクラスで実装する「良い」理由はありませんが、メソッドLocationListener外で実装する必要がありますonCreate()

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

一般的に、onResume()メソッドとメソッドで呼ばremoveUpdates()onDestroy()ます。 CommonsWareによるアプリケーション

などを確認することをお勧めします。すべてがより明確になると思います。WeatherPlus

于 2012-06-19T19:01:22.627 に答える
1

それは、アプリケーションで何をしたいかによって異なります。最初に、onCreate() が乱雑に見えることに同意します。小さな init() メソッドを書き、それを onCreate() から呼び出すとしましょう。実際にはまだ何も変わっていません。アクティビティのライフサイクルに注意する必要があるのは 1 つだけです。位置情報の更新を受信するように登録すると、画面にフォーカスがないときにアクティビティが更新される場合があります。もう 1 つのオプションは、登録を onResume() に移動することですが、onPause() で登録解除する必要があります。これは、アプリが現在画面に表示されている場合にのみ更新を取得します。

于 2012-06-19T18:57:44.983 に答える