在活动之间传递对象和/或对象列表的有效方法是什么?

时间:2016-04-05 22:33:24

标签: java android json design-patterns

我是Android的新手,在我的一个课程中学习优秀的设计模式。我正在开发一个应用程序作为我的项目的一部分,但我遇到了一些设计问题,并试图找出一个好的模式,以遵循。

我有以下课程

public class Playlist {
  ArrayList<Song> songs = new ArrayList<Song>();
  //..getters and setters and song to list

  }

public class Song {
  private String name;
  private String artist;
  private String File;
  //Getters and setters

}

在整个应用程序中,我将拥有所有已创建播放列表的ArrayList 所有可用歌曲的ArrayList。

应用程序最终将下载一个JSON对象并为该对象创建一个Song类的实例。

我一直在研究通过所有活动保持播放列表对象列表和歌曲对象列表,我找到了以下解决方案:

  1. 制作一个Gson并将其保存到sharedPref文件(这似乎不是一个好主意,因为我会不断保存和写作。)

  2. 我还读过有关使用sqllite的内容。但是我没有看到它的重点,因为我将把大多数歌曲作为JSON对象并用该对象制作一个歌曲实例。

  3. 我将播放列表实现为parceable,以便能够通过意图传递列表,但这似乎不是最好的方法,因为每次有更改时我都必须更新共享的pref。

  4. 任何人都可以向我指出正确的方向,或者如果为列表制作单例似乎是最有效的方式。 (全局单身,所以android不会破坏对象onDestroy())

    由于

3 个答案:

答案 0 :(得分:0)

  1. 要在活动之间传递对象,Parcelable是个好主意。
  2. 使用my_object,实现Parcelable的类的对象:

    要在活动之间传递,只需使用

    即可
    Intent intent = new Intent(ActivityA, ActivityB);
    intent.putExtra("MY_OBJECT", my_object);
    ...
    

    另外,使用此选项可使您的类具有可分辨性: http://www.parcelabler.com/

    1. 现在,如果要保留音乐列表,则应使用内部数据库sqlite,并将每个对象存储为Sqlite选项卡的一行。然后,您可以实现返回内部数据库中完整歌曲列表的方法。

答案 1 :(得分:0)

有效吗?

当用户对其播放列表进行更改时,您的用例要求您传递一个非常小的对象的几个实例。

  1. 这种情况很少发生。
  2. 转移的实例的数量和大小很可能很小。 (人们有成千上万首歌曲的播放列表吗?)
  3. 用户不需要&#34;瞬间&#34;回应变化。
  4. 简而言之,没有明显的理由说明为什么需要以最节省CPU的方式来完成。 (至少,这是我的意见。)

    要考虑的另一个效率是开发人员效率;即你花在设计,实施,测试,调整,维护这一特定功能上的时间。

    FWIW,我认为首选项或SQLlite数据库会更好,因为它们也可以用来保存播放列表。

答案 2 :(得分:0)

  • SQLite 只要您想要跨发布存储数据就是正确的方法,但如果您只想在应用处于活动状态时保留数据,那么不合宜。
  • 您可以使用全局Singleton ,它肯定是最简单的解决方案
  • 替代方案可能是 Eventbus 系统:每个组件都存储数据的副本。一个组件负责更新数据。如果有更新,它会通过Eventbus通知所有其他组件。这可能是考虑设计模式的最好的解决方案