到目前为止我创建的应用程序大多数,我从网络中获取数据并将其存储在单个类中以在活动之间共享数据,当我完成这些数据时,我通常会将其设置为NULL ,它的工作非常好
我的问题是哪种方法更好?
什么时候我们需要使用装载机?为什么我们不能通过Loaders共享数据?
如果问题重复......请忽略??
答案 0 :(得分:3)
<强> Parcelable:强>
在Activity
或Fragment
之间传递数据的最佳方法是使用Parcelable
个对象。据说它比Serializable
更优化。有几个库/插件可以帮助您创建Parcelable
个对象。最近我被提到Parceler, created by John Carl。但是,我个人使用Android Parcelable code generator by Michal Charmas插件,用于IntelliJ IDEA和Android Studio。
数据库或SharedPreferences:
使用数据库或SharedPreferences
在Activity
或Fragment
之间传递数据听起来很奇怪,而且由于它们不是以这种方式设计的,因此只会造成混乱。
<强>单身:强>
阅读这篇内容丰富的帖子Singletons are Pathological Liars。
<强>结论:强>
我建议Parcelable
或者如果你想要真正懒惰,那就去Serializable
(这并不可怕,但根据大多数情况,这也不是很好。)
不要使用单例,数据库,静态字段等来搞乱你的代码。它们会回来困扰你。
何时我们需要使用装载程序
加载程序,在您使用时将为AsyncTaskLoader
,主要用于我们想要从服务器检索数据(通过Web API)或在后台执行某些操作的情况。它类似于使用Thread
或AsyncTask
但非常强大,因为它不会在屏幕旋转时被破坏,与那两个不同。
您应该阅读How to Use Loaders in Android和Alex Lockwood's posts on Loaders(这是一系列的4个帖子。非常详细和精彩)。
答案 1 :(得分:0)
这一切都取决于您想要使用数据的方式。如果您希望将来使用这些数据,就像在应用程序被终止并重新启动之后,您应该将其保存在数据库中。 我更喜欢在一个单身人士上划线,因为我不必费心清除数据。 根据{{3}},我们通常使用加载器异步加载数据并监视数据源以进行更改。根据我的理解,你没有做其中任何一个,因此在这种情况下不需要加载器。
答案 2 :(得分:0)
1.Database:如果您将来要使用网络数据,或者您打算根据需要进行一些查询操作来进行过滤,最好使用db。
2.Singleton类:大多数开发人员使用它,因为它更有效,可以在getter和setter的帮助下轻松更改和检索值。
答案 3 :(得分:0)
这是一种非常酷的方式将数据传递给另一个活动我在Stackoverflow上的其他地方读取它并且现在总是使用它。它可能不适合您的用例,但听起来会如此。
例如,假设您要将可分配的“DataModel”从ActivityA传递给ActivityB。
在 ActivityB 内创建一个名为'start'的公共静态方法,就像这样。
private static final String DATAMODEL_KEY = "datamodel_key";
public static void start(Context context, DataModel dataModel) {
Intent intent = new Intent(context, ActivityB.class);
intent.putExtra(DATAMODEL_KEY, dataModel);
context.startActivity(intent);
}
要启动ActivityB,只需像上面这样
调用上面的'start'方法ActivityB.start(this, datamodel);
如果从某个活动调用,则使用'this',或者使用片段调用'getActivity()'。
这将包含在ActivityB中启动ActivityB的代码,例如private static final DATAMODEL_KEY字段等。要回答您的问题,请使用选项1并使用parcelables并尝试我上面发布的代码,以帮助您使用数据启动活动。