我最近在android上做了一个应用程序,在某些方面我怀疑哪个是共享数据的有效方式。就像我可以在一个类中声明一个静态变量并使用Classname.Variablename从另一个类调用该变量,或者我可以使用我的意图传递该数据并从另一个类获取意图中的数据,或者我可以使用共享首选项并从中获取数据它甚至可以将数据存储在数据库中,并从数据库中的其他类中检索它。我怀疑哪个是最有效的方法(获取数据)?由于android应用程序最终是为手机设计的,因此内存使用和效率应该是约束。任何人都可以指导我走正确的道路,这将非常有帮助。
答案 0 :(得分:25)
我的意见:
每个人最好取决于场景。让我解释一下。
静态变量是访问整个应用程序上下文的常用方法。如果您想保留少数据,退出应用程序后无需维护,这是最好的。
这不是一种数据存储。这是一种数据共享。我认为这是将数据从活动传递到活动的最佳方式。但是在Constants中维护值的关键是一个很好的编程事项。
共享首选项只不过是一个包含两列的简单表。 (核心价值)。
<强>的优点:强>
<强>缺点:强>
当我们有很多值存储复杂结构时,我们只剩下一个很好的解决方案,即。 D B。
<强>优点强>
<强>缺点强>
所以我们发现主要的问题是我们不能维持持久性我们使用的任何存储。一个简单而有效的解决方案是在每次启动应用程序时保持数据在线并与移动数据库同步。
答案 1 :(得分:4)
我可能错了,但我觉得我必须分享我的知识/经验......最快最简单的方法是使用静态......但我不会推荐这个。
我的选择将是: 数据库强>
<强>理由:强>
1 - 通过声明静态变量,它是not reliable
,因为在某个阶段,当您的应用程序或其他应用程序占用过多内存时,GC将尝试收集所有非引用对象,静态是一个很好的候选者......就像Activity A有静态变量而你目前在Activity B中,现在gc将删除A及其对象,有可能它也会收集静态。现在选择数据库是显而易见的,我不需要告诉你,因为在你的当前活动中,你总是可以从数据库中检索数据。
2 - 通过声明静态变量,如果它只是一个int或小数据类型,这不是什么大问题,但如果要保存一大堆复杂结构,那么有什么呢?你的活动很有可能leak memory
这也会给你带来麻烦。如果您正确使用数据库,则无泄漏。
SharedPreference/intent
也很好/快/内存有效(我猜),但在传递大型复杂结构时会有点麻烦。
总而言之,如果你只想传递一个小结构(string + int)并且你的应用程序没有触及堆的限制那么你可以使用static
但是如果你正在做一些记忆强烈的调用和传递一些大数据,然后database
是可靠的,可能比静态慢一点,但足够快,我们不会注意到。
希望它有所帮助。
答案 2 :(得分:2)
根据我的观点,
这取决于什么样的数据&amp;它有多重要。您可以通过以下方式使用它们,
Static
:在应用程序运行之前使用有限。SharedPreferenced
:当数据量非常小但对将来使用很重要时。Database
:当您有大量数据时。答案 3 :(得分:0)
不要使用静态变量。当你返回活动时,它将为null。
有关详细信息,请参阅this answer