如何在Android中正确实现Feed(类似于Facebook / Instagram)?

我对Android非常陌生。 我正在尝试创build一个包含大量图片和元数据的社交应用程序。 它有一个类似于Facebook上的饲料的屏幕。 我想使这个屏幕尽可能平滑和标准。

下面是我使用的库:OkHttp,Picasso,Retrofit,Gson。

现在,我一次性获取所有json,因为我在后端播种了虚拟值,响应足够小。 但是,将来会有前后两个域来限制json响应。

我现在的一些问题:

  1. 我正在使用OkHttp的毕加索。 它是否caching磁盘中的图像或只在内存中?

  2. 什么是caching饲料的最佳做法? 由于大多数内容是图像,我应该让毕加索处理caching还是应该caching一些项目? 听说过JakeWharton的DiskLruCache库,但没有尝试过。 我应该去吗?

  3. 如何保持一些饲料内容(如3或4)在滚动caching的任一方向,以便滚动显示平滑,并且图像在进入视图后不会开始加载。

  4. 如何自动处理json响应使用上一个和下一个字段时,用户滚动所有的内容,在这一个去。 基本上我想触发基于光标所滚动内容的数量的请求。

  5. 假设有一个类似的button,用户点击它,我应该改变UI和旁边喜欢的数量通过发送一个POST请求更新计数器,或者我应该发送请求,并等待从服务器更新的计数器之前更新用户界面?

我已经通过了Instamaterial的源代码,并学习了一些令人惊叹的东西。 但是它并没有显示整个后端集成。

我只想知道是否有其他的开放源码的应用程序,我可以学习或从中学习。 如果你知道任何教程,也将有所帮助。 我只想让应用程序体验尽可能stream畅,并希望学习一些最佳实践。

Solutions Collecting From Web of "如何在Android中正确实现Feed(类似于Facebook / Instagram)?"

  1. 这将caching到磁盘以及内存。 如果将Picasso设置为debugging模式,则会显示一个指示符,用于描述从(内存/磁盘/networking)

  2. 如果你不介意毕加索能够控制caching的时间等等,那么让它处理caching应该没问题。 我也很确定毕加索使用DiskLruCache

  3. 如果你主要关心的是图像,它们将被全部caching起来,并且不需要在这样做之后加载(直到它更新)。 您也可以使用Picasso注册callback,以更改显示或隐藏占位符的逻辑。

  4. 我认为你正在寻找的是你的列表视图上的滚动监听器(我假设你正在使用列表视图)。 当它经过一定的位置(5/6)时,开始加载下一个10.如果你正在使用一个recyclerview,你可以使用滚动监听器中的onScrollStateChanged函数来做到这一点,并使用LinearLayoutManager来调用findLastVisibleItemPosition

  5. 你应该采用哪种方法并不重要。 如果您认为更新服务器计数器(它不应该)需要很长时间,那么最好先在本地进行更新。

1.我会build议你检查Facebook的图像pipe理库是壁画 ,是相当真棒和成熟与其他图像加载库相比。

2.Fresco处理3层架构( BITMAP_MEMORY_CACHEENCODED_MEMORY_CACHEDISK_CACHE )caching图像的所有内容。 它也减less了OOM(内存不足)问题。 当视图中的图像超出屏幕时,它会自动回收位图,从而释放内存。

3.因为你已经实现了分页,所以当然你可能需要发送上一个logging项目的位置或索引,以便你可以获取后续项目。

4.为了让用户在你的应用程序中获得顺畅的体验,你应该增加计数器并同时发送请求到你的后端。

你也可以结账这个教程Facebook的饲料 。

我会更喜欢你的一些方法来解决你的一些问题:

为了处理JSON

你可以使用名为Retrofit的库,所以添加和删除服务器端的东西,将很容易在你的Android客户端处理。 只要在Java类中删除或添加variables就足够了!

为了兑现图片

我build议你使用Fresco ,Facebook的库,它会减轻你的工作很多。 因为它可以处理圆angular转换,下载进度条,圆形图像和更多的function。 所以,不仅为您处理内存和磁盘兑现,而且不同的图像格式更好地工作。

(我在我的最后一个项目中使用了毕加索,一些图片和一些URI不能正常工作,我尝试了毕加索,滑翔和通用图像加载程序,完全相同的图像和链接..只有Fresco可以为我工作)

这不是完全回答你的问题,但是,我想与那些可能帮助你的图书馆分享我的经验。