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

标签 android performance caching retrofit picasso

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

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

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

我现在的一些问题:

  1. 我正在使用带有 OkHttp 的 Picasso。是将图像也缓存在磁盘中还是仅缓存在内存中?

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

  3. 如何在缓存中沿任一滚动方向保留某些 Feed 内容(如 3 或 4),以便滚动看起来平滑,并且图像在进入 View 后不会开始加载。

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

  5. 假设有一个点赞按钮并且用户点击了它,我应该更改 UI 中点赞的数量并通过发送 POST 请求更新计数器还是应该发送请求并等待更新的计数器在 UI 中更新之前从服务器获取?

我已经看过Instamaterial的源代码了并学习了一些了不起的东西。但它并没有演示整个后端集成。

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

最佳答案

  1. 这将缓存到磁盘和内存。如果将 Picasso 设置为 Debug模式,它将显示一个指示器,描述图像从何处加载(内存/磁盘/网络)

  2. 如果您不介意 Picasso 控制内容的缓存时间等,那么让它处理缓存应该没问题。我也很确定 Picasso 使用 DiskLruCache

  3. 如果您在这里主要关心的是图像,它们将全部被缓存并且在缓存一次后不需要加载(直到更新)。您还可以向 Picasso 注册回调,以更改显示或隐藏占位符的逻辑。

  4. 我认为您正在寻找的是 ListView 上的滚动监听器(我假设您使用的是 ListView )。当它超过某个位置(5/6)时开始加载下一个 10。如果您使用的是 recyclerview,则可以使用滚动监听器中的 onScrollStateChanged 函数执行此操作,并使用 LinearLayoutManager 调用findLastVisibleItemPosition

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

关于android - 如何在 Android 中正确实现 feed(类似于 Facebook/Instagram)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32693996/

相关文章:

java - Google Guava Cache - cleanUp 和 invalidateAll

java - 从 AsyncTask 返回对象时出现问题

java - Java性能实例

ruby-on-rails - 使用 Rails.cache.fetch 混淆缓存 Active Record 查询

caching - Varnish :缓存 OPTIONS/CORS 请求

c - 用 N 个不可靠位计算 unsigned int 可能值的最快方法?

java - 在java中创建对象时出现错误

android - Google Drive Android API 在关闭后如何工作?

android - 在android的SurfaceView上渲染字节数组

sql - 使用索引优化SQLite3上的SQL查询