2

我已经为这个问题苦苦挣扎了很长时间,实际上我已经在 stackoverflow 中查看了很多帖子,都在谈论同样的问题,但没有任何确定性。

如何实现Singleton模式来实现Android Activity之间的数据共享?我说的是活动之间,而不是课程之间,哪一个是正确的方式?

这是我找到的所有信息:

1- 推荐标准 Singleton 表单的人,你可以用 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/

建议?注释?例子?

谷歌 Android 人员推荐它作为在活动之间共享复杂信息的一种方式,但不知道 Android 中的最佳方法。

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

请帮助我澄清这一点。

4

1 回答 1

3

我已经使用应用程序来保存“单例”实例以及静态最终变量。在我工作的框架中,Transfuse和 Singleton 的范围是通过 @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 回答