10

最近、Java for Android での開発を開始しました。

私の考えは、最初に大量のものをロードし、アプリケーションの存続期間中結果を保存する1つの静的クラスを作成することです。

アクティビティ間でオブジェクトを共有する方法をたくさん読んできましたが、1 つの静的クラスを作成するのが最善だと思います。どう思いますか?別のアプローチを使用する必要がありますか? インターネット上で多くの反対意見を読んだので、私は尋ねています。

ありがとうございました。

4

3 に答える 3

19

Wyzardが指摘したように、まったく異なるものである静的クラスとは対照的に、クラスの静的フィールドを参照していたと思います。一般的な経験則として、Java では静的フィールドに情報を保持することはお勧めできません。この理由は、クラスに保存するものの複数のインスタンスをインスタンス化する機能を妨げるためです。

Android アプリケーションの特定のケースでは、アプリケーション自体に関連付けられたデータを保存するという問題に対処する最善の方法は、android.app.Applicationクラスをサブクラス化し、それを使用してアプリケーションのグローバル データを処理することです。

class FooApplication extends Application
{
    private String privData;

    public String getPrivData() {
        return privData;
    }
}

次に、このクラスが (デフォルトではなくApplication) メイン アプリケーション クラスであることを宣言する必要があります。のapplicationエントリにAndroidManifest.xml次を追加します。

<application android:name="com.example.application.FooApplication"
             ...>
    ...
</application>

次に、サブクラスContext.getApplicationContext()のインスタンスとなるメソッドを使用して、アプリケーション内のどこからでもアプリケーション インスタンスを検索できます。Application

FooApplication app = (FooApplication)Context.getApplicationContext();
String privData = app.getPrivData();

「Application」のサブクラスを検索しようとしている場所によっては、「Context」なしで「getApplicationContext()」を呼び出す必要がある場合があります。

FooApplication app = (FooApplication)getApplicationContext();
String privData = app.getPrivData();
于 2013-02-26T07:34:47.860 に答える
3

あなたのソリューションの問題は、基本的にグローバルの巨大なスタックを作成していることです。避けられないこともありますが、グローバルが常に抱えているのと同じタイプの問題があります。すぐに、OO が適切に分解されていない読みにくいコードになってしまいます。これを使用することはできますが、慎重に使用してください。多くのアクティビティ間で実際に共有される重要なデータ構造でのみ使用してください。

于 2013-02-26T07:33:19.480 に答える
2

Androidは、と呼ばれるクラスを提供します。このクラスはApplication、アプリケーションが強制終了されない限り、gcされません。このクラスを初期化に使用します。コンテナとしての静的クラスはやや醜いですが、その理由を特定することはできません。

EnumSetsとして表現できないビットマスクなどの定数のコンテナとしてのみ使用します。

他の投稿が述べているSharedPreferencesように:私は、値を格納するための設定は存在すると思いますが、アプリケーションに必要な構造をロードするためではありません。これらの構造は、データのセマンティクスのモデルを表す、またはモデルを構成する構造からロードする必要があります。

于 2013-02-26T07:31:11.503 に答える