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



我是Android的新手。我试图创建一个包含大量图像和一些元数据的社交应用程序。它的屏幕类似于Facebook上的动态消息。我想让这个屏幕尽可能的平滑和标准。

以下是我正在使用的库:OkHttp, Picasso, Retrofit, Gson。

现在,我正在一次获取所有的json,因为我在后端播种了虚拟值,响应足够小。但是,在将来,它将具有previous和next字段来限制json响应。

我现在的一些问题:

  1. 我使用毕加索与OkHttp。它是否也在磁盘中缓存映像,还是只在内存中缓存映像?

  2. 缓存提要的最佳实践是什么?由于大部分内容是图像,我应该让Picasso处理缓存还是应该自己缓存一些项目?从杰克·沃顿那里听说过DiskLruCache库,但没有尝试过。我应该和它一起去吗?

  3. 如何在缓存中保持一些feed内容(如3或4)在滚动的任何方向,使滚动看起来平滑,图像不开始加载后进入视图

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

  5. 假设有一个喜欢的按钮,用户点击它,我应该改变喜欢的数量在UI和侧发送一个POST请求更新计数器,或者我应该发送请求,等待从服务器更新计数器之前更新它在UI?

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

我只是想知道是否有任何其他的开源应用程序,我可以研究或学习。如果你知道任何教程,也会有所帮助。我只是想让应用程序体验尽可能流畅,并想学习一些最佳实践。

  1. 这将缓存到磁盘和内存。如果你将Picasso设置为调试模式,它将显示一个指示符,说明图像是从哪里(内存/磁盘/网络)加载的

  2. 如果你不介意Picasso控制缓存的时间等,那么让它来处理缓存应该是好的。我也很确定毕加索用的是DiskLruCache

  3. 如果你在这里主要关心的是图像,他们都将被缓存,不需要加载后,他们这样做了一次(直到它更新)。你也可以在Picasso中注册一个回调,以改变显示或隐藏占位符的逻辑。

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

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

1。我建议你通过Facebook查看图像管理库,这是Fresco,与其他图像加载库相比非常棒和成熟。

2。Fresco使用三层架构(BITMAP_MEMORY_CACHE, ENCODED_MEMORY_CACHEDISK_CACHE)处理所有缓存图像的事情。它还减少了OOM(内存不足)问题。当视图中的图像离开屏幕时,它会自动回收位图,从而释放内存。

3。为此,你有实现分页,是的,当然你可能需要发送之前的记录项目位置或索引,这样你就能获取后面的项目

4。为了在你的应用程序中为用户提供流畅的体验,你应该增加计数器并同时将post请求发送到后端。

你也可以查看这个教程Facebook像饲料。

对于你的一些问题,我希望你能给出一些方法:

处理JSON:

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

For cash images:

我建议你使用Fresco, facebook图书馆,它会减轻你的工作很多。因为它可以处理圆角转换,下载进度条,圆形图像和更多的功能。所以,不仅处理内存和磁盘兑现为您,但也可以更好地与不同的图像格式。

(我在我的上一个项目中使用毕加索,一些图片和一些uri不起作用,我尝试了毕加索,Glide和通用图像加载器,完全相同的图像和相同的链接..只有Fresco可以为我工作)

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

最新更新