android - 在Android中实现Singleton以便在 Activity 之间共享数据的正确方法是什么?

标签 android design-patterns singleton

我已经为这个问题苦苦挣扎了很长一段时间,实际上我在 stackoverflow 上查了很多帖子,都讨论了同样的问题,但没有明确的答案。

如何实现单例模式来实现Android Activity之间的数据共享? 我是在 Activity 之间谈论,而不是在类里面谈论,哪一个是正确的方式?

这是我找到的所有信息:

1-那些推荐标准 Singleton 形式的人,您可以用 Java、C 等实现的形式,这里有一个示例:

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

2- 建议在 OnCreate 方法中实现它,如下所示:

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

3-使用应用程序实现方法的那些(对此不太确定):

Is it acceptable practice to use Singleton Objects to save state or share data between Activities?

4- 使用“singleTask”方法的方法,在 list 中定义它:

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 人员推荐它作为在 Activity 之间共享复杂信息的一种方式,但不知道 Android 中的最佳方法。

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

请帮我澄清一下。

最佳答案

我使用应用程序来保存“单例”实例以及静态最终变量。在我工作的框架中,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;
    }
}

关于android - 在Android中实现Singleton以便在 Activity 之间共享数据的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15164144/

相关文章:

java - 当 ViewPager 从右向左滚动时,LinearInterpolator 无法正常工作

java - 改造返回空对象

c++ - 这个 C++ 习语是否有一个名称,其中类型出售扩展其接口(interface)的包装器?

c++ - 关于使用单例 CRTP 的模板参数类型的内联静态成员,哪个编译器是正确的?

java - Java 中的单例服务和多线程

java - 套接字连接的单例类不起作用

android - 如何在android中获取相机拍摄照片的默认目录?

android - 启动 Activity 时获取 java.lang.RuntimeException

javascript - JavaScript 中的 Modules + Fascade + Mediator 组合

c# - S.O.L.I.D 原理和编译?