我一直在努力解决这个问题很长一段时间,实际上我已经在stackoverflow中检查了很多关于相同但没有确定性的帖子。
如何实现 Singleton模式来实现Android活动之间的数据共享? 我在谈论活动,而不是课程,哪一个是正确的方式?
这是我发现的所有信息:
1-推荐标准Singleton表单的人,可以在Java,C等中实现的表单,这里有一个例子:
http://es.wikipedia.org/wiki/Singleton
2-建议在OnCreate方法中实现它的人,如下所示:
http://androidcookbook.com/Recipe.seam?recipeId=1218
3-使用Application实现方法的那些(对此不太确定):
Is it acceptable practice to use Singleton Objects to save state or share data between Activities?
4-那些使用“singleTask”方法的方法,在清单中定义它:
http://developer.android.com/guide/topics/manifest/activity-element.html#lmode
5-和这样的更开放的方式(实际上这不是我认为的单身人士):
连连呢?评论?实例
谷歌Android人士建议将其作为在活动之间共享复杂信息的一种方式,但不知道Android中的最佳方法。
http://developer.android.com/guide/faq/framework.html#3
请帮我澄清一下。
答案 0 :(得分:3)
我已经使用Application来保存“Singleton”实例以及静态final变量。在我工作的框架中,Transfuse,Singletons通过@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;
}
}