5

一般的な LocationController、BatteryController、AppSateController などの初期化メソッドを備えたシングルトンがあるとします...

OnCreate はすべての回転で呼び出されるため、OnCreate とは対照的に、これらは onResume にある必要がありますか?

4

2 に答える 2

16

私の推奨事項は、通常、直接行うようにシングルトンを実装することです。Android を無視して、次のような通常の操作を行います。

class Singleton {
    static Singleton sInstance;

    static Singleton getInstance() {
        // NOTE, not thread safe!  Use a lock if
        // this will be called from outside the main thread.
        if (sInstance == null) {
            sInstance = new Singleton();
        }
        return sInstance;
    }
}

必要な時点で Singleton.getInstance() を呼び出します。シングルトンはその時点でインスタンス化され、プロセスが存在する限り再利用され続けます。これは、シングルトンを遅延して (必要な場合にのみ) 割り当てることができるため、良いアプローチです。ユーザー)に苦しむ。また、コードをクリーンに保つのにも役立ちます。シングルトンとその管理に関するすべてが独自の場所にあり、初期化のために実行されているアプリのグローバルな場所に依存しません。

また、シングルトンでコンテキストが必要な場合:

class Singleton {
    private final Context mContext;

    static Singleton sInstance;

    static Singleton getInstance(Context context) {
        // NOTE, not thread safe!  Use a lock if
        // this will be called from outside the main thread.
        if (sInstance == null) {
            sInstance = new Singleton(context);
        }
        return sInstance;
    }

    private Singleton(Context context) {
        // Be sure to use the application context, since this
        // object will remain around for the lifetime of the
        // application process.
        mContext = context.getApplicationContext();
    }
}
于 2013-02-24T09:00:37.703 に答える
1

シングルトンを初期化する必要がある場合 (私はアプリケーションレベルのシングルトンを想定しています)、適切な方法はApplicationを拡張し、そのonCreate()メソッドで必要な初期化を提供することです。ただし、初期化が重い場合は、Application クラスから開始される別のスレッドに配置することをお勧めします。

于 2013-02-24T05:18:43.580 に答える