1

そのため、ユーザーの位置を取得する必要があるアプリを作成することを計画しています。このアプリには、インターフェイスLocationControllerを実装するクラスが呼び出されLocationListenerます。

私が達成したいのは、メイン アクティビティ (MainActivity今のところ呼び出す) が (そのonCreateメソッドで)開始されるとすぐにLocationControllerオブジェクトを呼び出し、位置の修正と更新の取得を開始することです。

ただし、メイン アクティビティがシャットダウンされた後も実行し続ける IntentService または Service も実装する必要があります (つまり、 and または が呼び出されますonPause) onStop。場所の読み。LocationControlleronCreate

ここで、アクティビティからサービスにデータを渡す方法を検討しSerializable、 、BundleおよびParcelオブジェクトを調べましたが、それらのどれも渡すことができないLocationListenerか、またはLocationオブジェクトなので、それは私にとってあまりオプションではありません(何かを見逃していない限り、その場合、私は提案を受け入れます)。

私が考えたもう1つのオプションは、おそらく静的オブジェクトを使用することでした。基本的に、 をLocationController静的クラスにして、MainActivityがそのメソッドを呼び出して位置情報の取得を開始できるようにしますが、MainActivity終了後も存在し続けるようにします。ただし、これを行う方法についてはまだあいまいです。たとえば、全体LocationControllerを静的オブジェクトにしますか、それともそのメソッドの一部を静的にしますか?

誰でもこれで私を助けることができますか?

更新

そこで、カブコのアドバイスを受けて、主な活動クラスについて次のように書きました。

public void setLocationController() {
    if (locationController == null)
        this.locationController = new LocationController(this);
}

public static LocationController getLocationController() {
    // make sure to have called setLocationController() early in your
    // activity's life. onCreate is a good place
    return this.locationController;
}

を設定し、シングルトンを作成しますが、IntentService クラスの Location Controller にアクセスする ( と呼びますMyService) ために、次のようにメイン アクティビティ クラスの静的メンバーとして Location Controller にアクセスしました。

public class MyService extends IntentService {
    private LocationController locationController = null;

    public MyService() {
      super("MyService");
      locationController = MainActivity.getLocationController();
      ...
    }

....

}   // end of class
4

2 に答える 2

1

LocationController基本的に「全体LocationControllerを静的オブジェクトにする」クラスのシングルトンインスタンスを作成できます。アクティビティが停止すると、サービスはアプリケーションの存続期間を維持するものになることに注意してください。長時間実行して複数の「タスク」を処理する必要がある場合はIntentService、動作しなくなったときにシャットダウンするものに注意する必要があります (アプリとシングルトンを強制終了する可能性があります)。

于 2012-03-07T18:36:26.707 に答える
1

サービスを用意し、そのサービスに locationlistener を登録し、レシーバーを介してブロードキャスト インテントを送信して、位置の更新を Activity に渡すことをお勧めします。

于 2012-03-07T18:36:42.077 に答える