2

私は多くのアクティビティを持ち、ほとんどのアクティビティが複数のオブジェクトを共有するアプリケーションで作業しているため、Android Application クラスを拡張して MyApplication クラスを作成し、共有する選択したオブジェクトを保存しました。しかし、プロバイダー/ヘルパークラス内のこれらのオブジェクトにアクセスしている間、私は不快に感じます.Applicationのインスタンスを取得するには、プロバイダーでコンテキストが必要です。

そのため、MyApplication クラス内に SelectionProvider という静的クラスを作成して、選択したオブジェクトを格納することを計画しました。そうすれば、MyApplication にインスタンスを作成しなくても静的な方法でそれらにアクセスできます。

次のように静的内部クラスを持つ MyApplication クラス

class MyApplication extends Application {
    public static final String TAG = "MyApplication";



    public static class SelectionProvider {
        private static UserObj userObj;
        private static TownObj townObj;
        private static StoreObj storeObj;

        public static UserObj getUserObj() {
            return userObj;
        }

        public static setUserObj(UserObj userObj) {
            this.userObj = userObj;
        }

        public static TownObj getTownObj() {
            return townObj;
        }

        public static setTownObj(TownObj townObj) {
            this.townObj = townObj;
        }

        public static StoreObj getStoreObj() {
            return storeObj;
        }

        public static setStoreObj() {
            this.storeObj = storeObj;
        }
    }
}

それは正しいアプローチですか?そうでなければ、なぜですか?

選択したオブジェクト(内部クラスに格納されている)は、アプリケーションの全期間にわたって存在しますか、それともどこかで破棄されますか?

4

3 に答える 3

1

このメソッドまたは他の場所の静的な値は、このオブジェクトへのアクセスを必要とする複数のプロセスを実行していない限り、正常に機能し、アプリケーションの存続期間中持続するはずです。その場合は、サービスを使用してトランザクションを処理する必要があります。

于 2012-11-26T11:52:39.420 に答える
0

私はそれを内部クラスとして設計しません。SelectionProvider (および必要なその他のクラス) を独自の別のクラスとして作成し、MyApplication クラスの onCreate メソッドでインスタンス化します。

getApplication() を呼び出してアプリケーション クラスにキャストすることでいつでもアクセスできるため、アプリケーション オブジェクトをインスタンス化しないでください (例: (MyApplication)getApplication(); その後、クラスによって作成された任意のオブジェクトにアクセスできます。

これらのクラスでデータの永続性が問題になる場合は、それらの値を SQLLite に保存するか、共有設定として保存することを検討してください。Android は、バックグラウンドでリソースが必要な場合にいつでもアプリケーションを終了する可能性があるためです。

于 2012-11-26T12:04:53.247 に答える
0

独自のシングルトン クラスを作成します。

public class Data {

    /* Start of singleton block */

    private static Data data = new Data();

    private Data(){
    }

    public static Data getInstance(){
    }

    /* End of singleton block */ 

    private SelectionProvider selectionProvider;

    public SelectionProvider getSelectionProvider(){
       return selectionProvider;
    }

    /* other necessary methods (get, set) and classes below */

}

このようにして、 を使用してオブジェクトにアクセスできます Data.getInstance().getSelectionProvider()。これは、アクティブなアプリケーション中に利用できますが、ユーザーがしばらくの間アプリを離れて後で戻ってくるときのために、データの永続的な保存を組み込みたい場合があります。

public SelectionProvider getSelectionProvider(){
    if(selectionProvider == null)
        selectionProvider = readSelectionProviderFromPersistantStorage();

    return selectionProvider;
}
于 2012-11-26T12:09:32.607 に答える