杂志应用程序的最佳策略
Best strategy for a magazine app
我正在开发一个杂志应用程序,并试图找到优化性能和稳定性的最佳策略。该应用程序应该能够处理 +100 个页面,并期望用户可以快速顺畅地在页面之间滑动。
考虑到所有这些,这是我迄今为止尝试过的方法。
基本结构是使用选项卡,隐藏选项卡栏,以允许用户滑动。由于加载 + 100 个带有大图像的选项卡是错误的,所以我总是保留三个选项卡:当前页面、上一页和下一页。通过选择侦听器,我相应地更改位置。
我在选择更改时加载和处理图像的方式在这里很重要。该应用程序从 Internet 下载图像并将它们缓存在 FileSystemStorage 中。这些图像是 768 x 1024。这是我尝试过的不同的运气:
每次请求新页面时只需从文件系统中检索图像:
if (FileSystemStorage.getInstance().exists(rutaImagen)) {
try {
int size = (int) FileSystemStorage.getInstance().getLength(rutaImagen);
EncodedImage imagenPubli = EncodedImage.create(FileSystemStorage.getInstance().openInputStream(rutaImagen), size);
} catch(IOException io) {
}
}
这已被证明在内存使用方面效率低下且存在风险。我的iPad mini launch频繁出现低内存警告,没多久就被jetsam杀死了。
将图像存储在 WeakHashMap 中,因此图像不需要不断地从 FileSystemStorage 加载,这似乎是问题的原因并且太昂贵了。只有当它们被垃圾收集时,第一个方法才会起作用。
该解决方案性能更好,内存警告显着减少,但仍然存在。在对应用程序施加压力后,15 或 20 分钟后,jetsam 跳入并杀死了应用程序。
类似的方法:我试过CacheMap而不是WeakHashMap。到目前为止,这对我来说是最好的解决方案。我必须努力推动才能偶尔看到一些内存警告,到目前为止还没有崩溃。不过仍然不是很高兴,因为我相信我根本不应该看到任何内存警告。
我只在这里谈论 iOS,因为该应用程序在 Android 我使用的任何方法上都表现良好,而且我从来没有遇到过内存不足的情况。
你怎么看?我在正确的道路上吗?你们会使用不同的方法吗?
谢谢
我认为您应该使用 "let-it-be-done" 方法。到目前为止,您已经尝试自己编写所有代码,而 codenameOne 有许多优化的方法。最简单的方法是使用 MultiList,它将显示您的图像(通过使用 UrlImage)。 UrlImage 将允许 codenameone 处理缓存等。基本上,图像将在查看时加载并随后放入缓存中。
从问题中不清楚杂志页面只是一张图片。如果是这样,我会建议使用 ImageViewer class,因为它的设计完全符合无限大图像列表的用例,可以滑动和缩放。
如果您需要比图片更精致的东西,Tabs
的一般策略似乎是一个好的开始。如果效果不佳,您可以随时将 Tabs
替换为其他内容。
我正在开发一个杂志应用程序,并试图找到优化性能和稳定性的最佳策略。该应用程序应该能够处理 +100 个页面,并期望用户可以快速顺畅地在页面之间滑动。
考虑到所有这些,这是我迄今为止尝试过的方法。
基本结构是使用选项卡,隐藏选项卡栏,以允许用户滑动。由于加载 + 100 个带有大图像的选项卡是错误的,所以我总是保留三个选项卡:当前页面、上一页和下一页。通过选择侦听器,我相应地更改位置。
我在选择更改时加载和处理图像的方式在这里很重要。该应用程序从 Internet 下载图像并将它们缓存在 FileSystemStorage 中。这些图像是 768 x 1024。这是我尝试过的不同的运气:
每次请求新页面时只需从文件系统中检索图像:
if (FileSystemStorage.getInstance().exists(rutaImagen)) { try { int size = (int) FileSystemStorage.getInstance().getLength(rutaImagen); EncodedImage imagenPubli = EncodedImage.create(FileSystemStorage.getInstance().openInputStream(rutaImagen), size); } catch(IOException io) { } }
这已被证明在内存使用方面效率低下且存在风险。我的iPad mini launch频繁出现低内存警告,没多久就被jetsam杀死了。
将图像存储在 WeakHashMap 中,因此图像不需要不断地从 FileSystemStorage 加载,这似乎是问题的原因并且太昂贵了。只有当它们被垃圾收集时,第一个方法才会起作用。 该解决方案性能更好,内存警告显着减少,但仍然存在。在对应用程序施加压力后,15 或 20 分钟后,jetsam 跳入并杀死了应用程序。
类似的方法:我试过CacheMap而不是WeakHashMap。到目前为止,这对我来说是最好的解决方案。我必须努力推动才能偶尔看到一些内存警告,到目前为止还没有崩溃。不过仍然不是很高兴,因为我相信我根本不应该看到任何内存警告。
我只在这里谈论 iOS,因为该应用程序在 Android 我使用的任何方法上都表现良好,而且我从来没有遇到过内存不足的情况。
你怎么看?我在正确的道路上吗?你们会使用不同的方法吗?
谢谢
我认为您应该使用 "let-it-be-done" 方法。到目前为止,您已经尝试自己编写所有代码,而 codenameOne 有许多优化的方法。最简单的方法是使用 MultiList,它将显示您的图像(通过使用 UrlImage)。 UrlImage 将允许 codenameone 处理缓存等。基本上,图像将在查看时加载并随后放入缓存中。
从问题中不清楚杂志页面只是一张图片。如果是这样,我会建议使用 ImageViewer class,因为它的设计完全符合无限大图像列表的用例,可以滑动和缩放。
如果您需要比图片更精致的东西,Tabs
的一般策略似乎是一个好的开始。如果效果不佳,您可以随时将 Tabs
替换为其他内容。