0

シングルトンを使用して、アクティビティ間で大きなデータ オブジェクトを共有しようとしています。しかし、新しいアクティビティを開くと、シングルトンが空になります。アプリケーションのどこから呼び出しても、シングルトンは同じであるべきだと私には思えます。

シングルトンのスコープが個々のアクティビティに限定されているようです。これを回避すると、アプリが非常に複雑になります。私は何か間違ったことをしているに違いない。拡張された Application クラスでそれらをインスタンス化しようとさえしました...Googleはそれを使用する必要はないと言いますが...

誰かが私が間違っているところを指摘できますか? つまり、この singletom の各アクティビティに同じデータが含まれていないのはなぜですか?

私はそれをActivityから呼び出します...

DataLog dataLog = DataLog.getInstance(this);

私は持っている...

public class DataLog extends ArrayList<String> implements Serializable {
    private static final long serialVersionUID = 0L;
    private static DataLog sInstance;
    private static Context mContext;

    public static DataLog getInstance(Context context) {
        mContext = context.getApplicationContext();
        prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
        if (sInstance == null) {
            sInstance = new DataLog();
        }
        return sInstance;
    }

    private DataLog() {
    }

    public boolean add(String entry) {
        super.add(entry);
        return true;
    }

    public void add(int index, String entry) {
        if (index > 0)
            super.add(index, entry);
        else
            super.add(entry);
    }

    public void clear() {
        super.clear();
    }

    ...
}
4

1 に答える 1

0

Android で大規模なデータ セットを共有する場合は、シングルトンを避けることを強くお勧めします。

シングルトンはライフサイクルの短いオブジェクトに使用されます。

SharedPreferences、SQLite DB、またはファイル保存に切り替えます。この動作を経験したのはあなただけではなく、その理由は android アクティビティとシステム自体 (アクティビティとそのデータの管理) の性質にあります。

シングルトンがあなたのケースに悪い理由の例を次に示します。

重要なデータを保存しました。ユーザーは、ホームボタンでアプリを閉じて誰かに電話をかけることができることを知っています(あなたのアプリにいるときに誰かが彼に電話をかけたかもしれません)。(これは、ユーザーおよび Android アプリから予想される動作です)。システムは、メモリのメンテナンス、アプリの非アクティブなどのために、プロセスとその中のすべての静的変数を簡単に強制終了できます...結果=データが失われます。したがって、それを使用するのは安全ではありません。

于 2013-08-17T17:14:38.797 に答える