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

Ami*_*ari 7 performance android caching picasso retrofit

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

以下是我使用的库:OkHttp,Picasso,Retrofit,Gson.

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

我现在的一些问题:

  1. 我正在使用毕加索和OkHttp.是否将图像缓存在磁盘中或仅在内存中?

  2. 缓存Feed的最佳做法是什么?由于大多数内容都是图像,我应该让Picasso处理缓存还是应该自己缓存一些项目?听说JakeWharton的DiskLruCache库但没试过.我应该去吗?

  3. 如何在缓存中的任一滚动方向上保留一些Feed内容(如3或4),以便滚动显示平滑,并且图像在进入视图后不会开始加载.

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

  5. 假设有一个类似按钮,用户点击它,我应该通过向更新计数器发送POST请求来更改UI和侧面的喜欢数量,还是应该发送请求并等待来自服务器的更新计数器,然后再将其更新为用户界面?

我已经浏览了Instamaterial的源代码,并学习了一些令人惊奇的东西.但它并没有展示整个后端集成.

我只是想知道是否还有其他我可以学习或学习的开源应用程序.如果您知道任何有用的教程.我只是想让应用程序体验尽可能顺畅,并希望学习一些最佳实践.

Mar*_*per 6

  1. 这将缓存到磁盘和内存.如果将Picasso设置为调试模式,它将显示一个指示器,用于描述从中加载图像的位置(内存/磁盘/网络)

  2. 如果你不介意Picasso可以控制缓存事物的时间等等,那么让它处理缓存应该没问题.我也很确定毕加索使用的DiskLruCache

  3. 如果您主要关心的是图像,那么它们都将被缓存,并且在它们完成之后不应该加载(直到它更新).您还可以使用Picasso注册回调,以便更改显示或隐藏占位符的逻辑.

  4. 我认为你正在寻找的是listview上的滚动监听器(我假设你正在使用列表视图).当它超过某个位置(5/6)时开始加载下一个10.如果您正在使用recyclerview,您可以onScrollStateChanged使用滚动侦听器中的函数执行此操作并使用LinearLayoutManagerto callfindLastVisibleItemPosition

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