【问题标题】:How to keep calculated data in memory for multiple activities?如何将计算数据保存在内存中以进行多个活动?
【发布时间】:2013-07-01 14:43:02
【问题描述】:

我的问题对我来说似乎很简单,但显然事实并非如此。

我有一个核心类,它能够根据用户输入的参数计算复杂的结果。到目前为止,我将结果显示为 ListView,而对于详细视图,我使用了滑动面板 - 所以在一个活动 A 中一切都很整洁。

但现在,我想摆脱滑动设计并“简单地”使用主/细节流,这样我就可以在平板电脑上和手机上分别显示两个片段。

好吧,我不想为此重新设计整个应用程序,但基本上:我如何获取不同活动 B 的详细信息???

我知道通过 Intent 我只能发送 Parcelable(或可序列化)数据,但这对于本质上是 int-array-type 的数据来说太复杂了!从 Intent 转换和重构的所有过程——这只是一种痛苦!

当然,我也不需要数据库或类似的复杂东西 - 请不要使用 SharedPrefs,这至少与实现 Parcelable 一样复杂!

基本上,我想到了两种方法,但它们都......臭......有点: a)将计算的数据存储在应用程序类中 - 问题:应用程序可能会被销毁并重新启动,只是为了重新显示活动 B。那么应用程序对象中就不会剩下任何东西了! b) 实现一个内容提供者来进行计算并在那里缓存结果。唔。游标又是一种复杂的方式来传输简单的结果。并且:我应该将结果在 ContentProvider 中缓存多长时间?

我觉得这一切都是一团糟。 :-( 有什么想法吗?

【问题讨论】:

    标签: android android-activity android-fragments android-contentprovider data-transfer


    【解决方案1】:

    Intent 方法是迄今为止最简单的一种。 谈到 Master/Detail 流,通常意味着传递一个 id,这是很少的信息,很容易从 A 重构到 B(活动)。

    不要完全因为你提到的原因而使用 A,而 B 哇!工作太多=)

    我真的认为无论是使用 Intent 还是使用共享首选项,它们都是迄今为止对代码要求最低的选项。

    【讨论】:

    • 仅当 ID 指向某些数据时才将 ID 作为轻量级意图内容传递 - 而我的问题正是在哪里保存该数据...
    • @Zordid 有您的顾虑,我认为唯一真正的方法是将您的数据存储在文件中,或使用数据库(可能太多,具体取决于数据类型)。
    • 这一切都非常复杂。我计算巴士的出发时间——详细数据是完整的旅程,只有几个字节的数据,但结构化。我永远不会为此创建数据库或平面文件。但是将这样一个对象放入一个意图中(在某种意义上,它只不过是一个键值对的 HashMap)也是过分的......
    【解决方案2】:

    您是否能够创建应用程序被破坏和所有内容被删除的行为?我一直在开发一个应用程序来做一些相同的事情,并且我一直在使用公共静态变量将事物存储在创建它们的活动中。这样它们就可以从其他活动中访问。不一定是最优雅的做事方式,但它对我来说很好。

    【讨论】:

      【解决方案3】:

      哦,伙计,这不是一团糟:)

      您知道设计模式吗?如果知道,那么您可以使用单例模式来为您的下一个活动存储数据

      public class mySingleton 
      {
         mySingleton instance;
         yourvariable1;
         yourvariable2;
         yourvariable3;
         yourobject1;
         yourobject2;
      
        public static mySingleton getSingletonInstance()
          {
            if(instance==null)
              {
                instance=new mySingleton();
              }
            return instance;
          }
      }
      

      通过这种方式,您可以保存您的数据,直到您的任何活动正在运行,或者您可以说直到您的应用程序在系统内存中

      但是如果您想关闭应用程序并保留数据,那么在那里创建一个后台服务,您可以保存您的应用程序活动将破坏的数据,但该服务将包含变量和数据

      希望它能解决你的问题

      【讨论】:

      • ...我当然知道单例... :-) 但是在 Android 中,这是行不通的,因为你永远不能依赖一个应用程序(包括它的单例类)在活动时仍然活着带到前面...
      • 你可以启动一个后台服务来保存你的数据
      • 或者如果你想把数据持久化很长一段时间,你可以在永久存储上写一些文件,然后在上面写红或写数据
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 2011-11-03
      • 2011-10-31
      • 1970-01-01
      相关资源
      最近更新 更多