2

私は長い間この問題に苦しんでいます、実際に私は同じことについて話しているstackoverflowの多くの投稿をチェックしましたが、決定的なものは何もありません。

シングルトンパターンを実装してAndroidアクティビティ間でデータ共有を実現するにはどうすればよいですか?クラスではなく、アクティビティ間で話しているのですが、どちらが正しい方法ですか?

これは私が見つけたすべての情報です:

1-標準のシングルトンフォームを推奨するもの、Java、Cなどで実装する可能性のあるもの、ここに例があります:

http://es.wikipedia.org/wiki/Singleton

2-次のようにOnCreateメソッドで実装することを提案するもの:

http://androidcookbook.com/Recipe.seam?recipeId=1218

3-アプリケーション実装アプローチを使用するもの(これについてはよくわかりません):

シングルトンオブジェクトを使用して状態を保存したり、アクティビティ間でデータを共有したりすることは許容されますか?

4-「singleTask」アプローチを使用し、マニフェストで定義するもの:

http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

5-そしてこのようなもっとエキゾチックな方法(実際にはこれはシングルトンではないと思います):

http://www.jameselsey.co.uk/blogs/techblog/android-implementing-global-state-share-data-between-activities-and-across-your-application/

提案?コメント?例?

Google Androidの人々は、アクティビティ間で複雑な情報を共有する1つの方法としてこれを推奨していますが、Androidでの最善のアプローチについての手がかりはありません。

http://developer.android.com/guide/faq/framework.html#3

これを明確にするのを手伝ってください。

4

1 に答える 1

3

「シングルトン」インスタンスを保持するためのアプリケーションと静的なfinal変数の両方を使用しました。私が取り組んでいるフレームワークであるTransfuseでは、シングルトンは@Singletonアノテーションを介してスコープされます。これらは、静的な最終マップで指定されたシングルトンを保持します。

@Singleton
public class SingletonExample{
    ...
}

http://androidtransfuse.org/documentation.html#singleton

そして、これは与えられたシングルトンインスタンスを保持するマップです:

public class ConcurrentDoubleLockingScope implements Scope {

    private final ConcurrentMap<Class, Object> singletonMap = new ConcurrentHashMap<Class, Object>();

    @Override
    public <T> T getScopedObject(Class<T> clazz, Provider<T> provider) {
        Object result = singletonMap.get(clazz);
        if (result == null) {
            Object value = provider.get();
            result = singletonMap.putIfAbsent(clazz, value);
            if (result == null) {
                result = value;
            }
        }

        return (T) result;
    }
}
于 2013-03-01T18:18:26.197 に答える