获取数据和传递给另一个Activity的最佳方法是什么?

时间:2015-10-08 10:37:28

标签: android database singleton parcelable android-loader

  

到目前为止我创建的应用程序大多数,我从网络中获取数据并将其存储在单个类中以在活动之间共享数据,当我完成这些数据时,我通常会将其设置为NULL ,它的工作非常好

我的问题是哪种方法更好?

  1. 使用parcelable
  2. 在数据库中写入并为其查询
  3. 单身人士课程
  4. 什么时候我们需要使用装载机?为什么我们不能通过Loaders共享数据?

    如果问题重复......请忽略??

4 个答案:

答案 0 :(得分:3)

回答第一部分

  1. <强> Parcelable:

    ActivityFragment之间传递数据的最佳方法是使用Parcelable个对象。据说它比Serializable更优化。有几个库/插件可以帮助您创建Parcelable个对象。最近我被提到Parceler, created by John Carl。但是,我个人使用Android Parcelable code generator by Michal Charmas插件,用于IntelliJ IDEA和Android Studio。

  2. 数据库或SharedPreferences:

    使用数据库或SharedPreferencesActivityFragment之间传递数据听起来很奇怪,而且由于它们不是以这种方式设计的,因此只会造成混乱。

  3. <强>单身:

    阅读这篇内容丰富的帖子Singletons are Pathological Liars

  4. <强>结论:

    我建议Parcelable或者如果你想要真正懒惰,那就去Serializable(这并不可怕,但根据大多数情况,这也不是很好。)

    不要使用单例,数据库,静态字段等来搞乱你的代码。它们会回来困扰你。

    回答第二部分:

      

    何时我们需要使用装载程序

    加载程序,在您使用时将为AsyncTaskLoader,主要用于我们想要从服务器检索数据(通过Web API)或在后台执行某些操作的情况。它类似于使用ThreadAsyncTask但非常强大,因为它不会在屏幕旋转时被破坏,与那两个不同。

    您应该阅读How to Use Loaders in AndroidAlex 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并尝试我上面发布的代码,以帮助您使用数据启动活动。