Java 如何在活动之间传递大型集合(主细节流)

Java 如何在活动之间传递大型集合(主细节流),java,android,android-activity,Java,Android,Android Activity,背景: 我正在实现一个从web服务读取电影信息的应用程序。该web服务返回关于每部电影的多个信息(标题、日期、海报url、导演、演员等) 该web服务支持分页,因此电影以100包的形式加载 实施: 这个想法是用所有的海报显示一个网格。当用户向下滚动时,自动请求更多项目 单击某个项目时,用户将导航到具有所选电影的详细视图的库,允许使用ViewPager滚动详细信息 因此,我们的想法是将网格中检索到的电影集合传递给“DetailedGalleryActivity” 更新:还需要在用户离开片段时保

背景:

我正在实现一个从web服务读取电影信息的应用程序。该web服务返回关于每部电影的多个信息(标题、日期、海报url、导演、演员等)

该web服务支持分页,因此电影以100包的形式加载

实施:

这个想法是用所有的海报显示一个网格。当用户向下滚动时,自动请求更多项目

单击某个项目时,用户将导航到具有所选电影的详细视图的库,允许使用ViewPager滚动详细信息

因此,我们的想法是将网格中检索到的电影集合传递给“DetailedGalleryActivity”

更新:还需要在用户离开片段时保存状态,以便处理片段生命周期。您可以通过启用开发者选项对其进行测试:不保留活动

问题

我的第一种方法是用json序列化电影集合,并将其作为额外的字符串传递给活动

但是由于电影列表很大,如果用户在网格中滚动很多,json的大小对于一个捆绑包来说是非常大的(请参阅),因此会出现运行时异常

我已经检查了一些关于在启动detail活动之前将数据持久化到SharedReferences或其他持久存储中,然后从detail访问数据的答案。我觉得这个解决方案很奇怪,因为它忽略了使用自定义和手工解决方案在活动之间传递数据的机制


解决这个问题的最佳方法是什么?

我也不确定这是否是一个好建议

创建另一个类并添加一个静态方法,我们将其命名为MovieUtil

//样品

private class MovieUtil {
  private static List<Movies> movies;
  public static List<Movies> getMovies();//getter
  public static void setMovies(List<Movie> movies);//setter
}
private-class-MovieUtil{
私有静态列表电影;
公共静态列表getMovies();//getter
公共静态void setMovies(列出电影);//setter
}
在启动DetailedGalleryActivity之前,请在MovieUtil.setMovies()上设置电影列表

然后在创建DetailedGalleryActivity时,使用MovieUtil.getMovies()初始化列表


注意:关闭DetailedGalleryActivity时,您可以清除movieutil上的电影列表。

您可以将每部电影的json存储在一个文件(movie_1、movie_2等)中,然后只传递电影的id,并从文件中获取当前电影的数据。也许,在完成后删除所有这些文件应该是一个好主意。是否有特定的原因使您希望使用活动而不是片段?如果您使用片段,您可以简单地将DetailedGallery作为片段加载,并将数据作为参数传递。这是一个好主意-该技术出现在以下问题的答案“使用单例类”下。我也不知道哪个是更好的单例方法或静态方法,有很多人争论哪个是真正更好的。但为了简单起见,我在这种场景中使用静态方法(?):我更新了这个问题,因为这个解决方案解决了活动之间的数据传递问题,但无法保存saveInstanceState()上的信息,以便在活动被破坏时恢复接口