如何在 Android 中正确实现提要(类似于 Facebook/Instagram)?
How to properly implement feed(similar to Facebook/Instagram) in Android?
我对 Android 很陌生。我正在尝试创建一个包含大量图像和一些元数据的社交应用程序。它有一个类似于 Facebook 上的提要的屏幕。我想让这个画面尽可能流畅和标准。
以下是我正在使用的库:OkHttp、Picasso、Retrofit、Gson。
现在,我正在一次性获取所有 json,因为我在后端播种了虚拟值并且响应足够小。但是,将来,它将有 previous 和 next 字段来限制 json 响应。
我现在的一些问题:
我正在使用带有 OkHttp 的 Picasso。图像是否也缓存在磁盘中或仅缓存在内存中?
缓存提要的最佳做法是什么?由于大部分内容是图像,我应该让 Picasso 处理缓存还是我自己缓存一些项目?从 JakeWharton 那里听说过 DiskLruCache 库,但没有尝试过。我应该去吗?
如何在缓存中沿任一滚动方向保留某些提要内容(如 3 或 4),以便滚动看起来平滑并且图像在进入视图后不会开始加载。
如何在用户滚动一次获取的所有内容时使用上一个和下一个字段自动处理 json 响应。基本上我想根据基于游标滚动的内容数量触发请求。
假设有一个点赞按钮并且用户点击了它,我是否应该更改 UI 中的点赞数量并发送 POST 更新计数器的请求或者我应该发送请求并等待服务器更新计数器,然后再在 UI?
中更新它
我已经阅读了 Instamaterial 的源代码,并且学到了一些了不起的东西。但它并没有演示整个后端集成。
我只是想知道有没有其他的开源软件可以让我学习或学习。如果您知道任何教程也会有所帮助。我只是想让应用程序体验尽可能流畅,并想学习一些最佳实践。
这将缓存到磁盘和内存。如果将 Picasso 设置为调试模式,它将显示一个指示器,描述图像从何处加载 (memory/disk/network)
如果您不介意 Picasso 可以控制内容的缓存时间等等,那么让它处理缓存应该没问题。我也很确定 Picasso 使用 DiskLruCache
如果您在这里主要关心的是图像,它们将全部被缓存并且在缓存一次后不需要加载(直到更新)。您还可以向 Picasso 注册回调,以更改显示或隐藏占位符的逻辑。
我认为您正在寻找的是列表视图上的滚动侦听器(我假设您使用的是列表视图)。当它超过某个位置(5/6)时开始加载下一个 10。如果您使用的是 recyclerview,则可以使用滚动侦听器中的 onScrollStateChanged
函数执行此操作,并使用 LinearLayoutManager
调用findLastVisibleItemPosition
采用哪种方法并不重要。如果您认为更新服务器计数器需要很长时间(不应该),那么最好先在本地更新它。
1.I 建议您查看 Facebook 的 图片管理库 Fresco 与其他图片加载库相比,它非常棒且成熟.
2.Fresco 使用 3 层架构(BITMAP_MEMORY_CACHE
、ENCODED_MEMORY_CACHE
和 DISK_CACHE
)处理所有图像缓存。它还减少了 OOM(内存不足)问题。当视图中的图像超出屏幕时,它会自动回收位图,从而释放内存。
3.For 你已经实现了分页,是的,你可能必须发送前一个记录项目的位置或索引,以便你可以获取它后面的项目。
4.For 为了让用户在您的应用程序中获得流畅的体验,您应该增加计数器并同时向您的后端发送 post 请求。
您还可以查看本教程 Facebook like Feed。
对于你的一些问题,我更喜欢你的一些方法:
用于处理JSON:
您可以使用名为 Retrofit 的库,因此在服务器端添加和删除内容,在您的 android 客户端将很容易处理。只需在 Java class 中删除或添加变量就足够了!
图片兑现:
我建议你使用 Fresco,facebook 图书馆,它会大大减轻你的工作。因为它可以处理圆角转换、下载进度条、圆形图像和更多功能。因此,不仅可以为您处理内存和磁盘缓存,还可以更好地处理不同的图像格式。
(我在上一个项目中使用了 picasso,有些图片和一些 URI 效果不佳,我在完全相同的图像和相同的图像上尝试了 Picasso、Glide 和 Universal Image Loader link..ONLY Fresco对我来说可能很好)
这并不能完全回答您的问题,但是,我想与那些可能对您有所帮助的图书馆分享我的经验。
我对 Android 很陌生。我正在尝试创建一个包含大量图像和一些元数据的社交应用程序。它有一个类似于 Facebook 上的提要的屏幕。我想让这个画面尽可能流畅和标准。
以下是我正在使用的库:OkHttp、Picasso、Retrofit、Gson。
现在,我正在一次性获取所有 json,因为我在后端播种了虚拟值并且响应足够小。但是,将来,它将有 previous 和 next 字段来限制 json 响应。
我现在的一些问题:
我正在使用带有 OkHttp 的 Picasso。图像是否也缓存在磁盘中或仅缓存在内存中?
缓存提要的最佳做法是什么?由于大部分内容是图像,我应该让 Picasso 处理缓存还是我自己缓存一些项目?从 JakeWharton 那里听说过 DiskLruCache 库,但没有尝试过。我应该去吗?
如何在缓存中沿任一滚动方向保留某些提要内容(如 3 或 4),以便滚动看起来平滑并且图像在进入视图后不会开始加载。
如何在用户滚动一次获取的所有内容时使用上一个和下一个字段自动处理 json 响应。基本上我想根据基于游标滚动的内容数量触发请求。
假设有一个点赞按钮并且用户点击了它,我是否应该更改 UI 中的点赞数量并发送 POST 更新计数器的请求或者我应该发送请求并等待服务器更新计数器,然后再在 UI?
中更新它
我已经阅读了 Instamaterial 的源代码,并且学到了一些了不起的东西。但它并没有演示整个后端集成。
我只是想知道有没有其他的开源软件可以让我学习或学习。如果您知道任何教程也会有所帮助。我只是想让应用程序体验尽可能流畅,并想学习一些最佳实践。
这将缓存到磁盘和内存。如果将 Picasso 设置为调试模式,它将显示一个指示器,描述图像从何处加载 (memory/disk/network)
如果您不介意 Picasso 可以控制内容的缓存时间等等,那么让它处理缓存应该没问题。我也很确定 Picasso 使用
DiskLruCache
如果您在这里主要关心的是图像,它们将全部被缓存并且在缓存一次后不需要加载(直到更新)。您还可以向 Picasso 注册回调,以更改显示或隐藏占位符的逻辑。
我认为您正在寻找的是列表视图上的滚动侦听器(我假设您使用的是列表视图)。当它超过某个位置(5/6)时开始加载下一个 10。如果您使用的是 recyclerview,则可以使用滚动侦听器中的
onScrollStateChanged
函数执行此操作,并使用LinearLayoutManager
调用findLastVisibleItemPosition
采用哪种方法并不重要。如果您认为更新服务器计数器需要很长时间(不应该),那么最好先在本地更新它。
1.I 建议您查看 Facebook 的 图片管理库 Fresco 与其他图片加载库相比,它非常棒且成熟.
2.Fresco 使用 3 层架构(BITMAP_MEMORY_CACHE
、ENCODED_MEMORY_CACHE
和 DISK_CACHE
)处理所有图像缓存。它还减少了 OOM(内存不足)问题。当视图中的图像超出屏幕时,它会自动回收位图,从而释放内存。
3.For 你已经实现了分页,是的,你可能必须发送前一个记录项目的位置或索引,以便你可以获取它后面的项目。
4.For 为了让用户在您的应用程序中获得流畅的体验,您应该增加计数器并同时向您的后端发送 post 请求。
您还可以查看本教程 Facebook like Feed。
对于你的一些问题,我更喜欢你的一些方法:
用于处理JSON:
您可以使用名为 Retrofit 的库,因此在服务器端添加和删除内容,在您的 android 客户端将很容易处理。只需在 Java class 中删除或添加变量就足够了!
图片兑现:
我建议你使用 Fresco,facebook 图书馆,它会大大减轻你的工作。因为它可以处理圆角转换、下载进度条、圆形图像和更多功能。因此,不仅可以为您处理内存和磁盘缓存,还可以更好地处理不同的图像格式。
(我在上一个项目中使用了 picasso,有些图片和一些 URI 效果不佳,我在完全相同的图像和相同的图像上尝试了 Picasso、Glide 和 Universal Image Loader link..ONLY Fresco对我来说可能很好)
这并不能完全回答您的问题,但是,我想与那些可能对您有所帮助的图书馆分享我的经验。