Codenameone 杂志应用的最佳策略

Codenameone 杂志应用的最佳策略,codenameone,Codenameone,我正在开发一个杂志应用程序,试图找到优化性能和稳定性的最佳策略。该应用程序应该能够处理+100个页面,并期望用户能够快速、顺利地在页面之间滑动 考虑到所有这些,这就是我迄今为止所尝试的 基本结构是使用选项卡,隐藏选项卡栏,允许用户滑动。由于加载+100个带有巨大图像的标签是错误的,我总是保留三个标签:当前页面、上一页和下一页。使用选择侦听器,我会相应地更改位置 当选择发生变化时,我加载和处理图像的方式在这里很重要。该应用程序从互联网下载图像并将其缓存在文件系统存储中。这些图像是768 x 102

我正在开发一个杂志应用程序,试图找到优化性能和稳定性的最佳策略。该应用程序应该能够处理+100个页面,并期望用户能够快速、顺利地在页面之间滑动

考虑到所有这些,这就是我迄今为止所尝试的

基本结构是使用选项卡,隐藏选项卡栏,允许用户滑动。由于加载+100个带有巨大图像的标签是错误的,我总是保留三个标签:当前页面、上一页和下一页。使用选择侦听器,我会相应地更改位置

当选择发生变化时,我加载和处理图像的方式在这里很重要。该应用程序从互联网下载图像并将其缓存在文件系统存储中。这些图像是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经常发出低内存警告,过了一会儿就被jetsam杀死了

  • 将图像存储在WeakHashMap中,这样图像就不需要从文件系统存储中不断加载,这似乎是问题的原因,而且成本太高。只有当它们被垃圾收集时,第一个方法才会起作用。 此解决方案性能更好,内存警告也大大减少,但仍然存在。在给应用程序施加了巨大压力后,15或20分钟后,jetsam跳入并杀死了应用程序

  • 类似的方法:我尝试了CacheMap,而不是WeakHashMap。到目前为止,这是我最好的解决方案。我必须用力推才能偶尔看到一些内存警告,到目前为止还没有崩溃。但我还是不太高兴,因为我相信我根本不应该看到任何关于记忆的警告

我之所以在这里谈论iOS,是因为无论我使用什么方法,这款应用在Android上都表现良好,而且我从来没有从内存中得到过任何东西

你觉得怎么样?我走对了吗?你们会用不同的方法吗


谢谢

我认为你应该使用“顺其自然”的方法。到目前为止,您已经尝试自己编写所有代码,而codenameOne有许多优化的方法。最简单的方法是使用多列表,它将显示您的图像(通过使用UrlImage)。UrlImage将允许codenameone处理缓存和其他操作。基本上,图像将在查看时加载,然后放入缓存中

从这个问题上看,不清楚杂志页面在哪里只是一张图片。如果是这样的话,我会建议使用这个类,因为它的设计正好与一个无限大的图像列表的用例配合使用


如果您需要比图像更精细的东西,那么使用
选项卡的一般策略似乎是一个好的开始。如果它表现不好,你可以用
标签来代替其他东西。

实际上,它会更精细一些。在文章之间从左到右浏览,在每篇文章内部从上到下浏览。我认为这排除了ImageViewer的可能性,但我关心的是,在结构之外,如何优化内存使用。每次需要图像时从存储器加载似乎不是最好的选择。只要图像不是很大,在显示UI时从存储器加载可能非常有效。我看到的主要问题是释放图像时可能会出现内存泄漏,但这些都是可以修复的。是的,我认为这就是问题所在。这就是我使用CacheMap的原因,所以图像不会经常发布。您认为这是最好的方法吗?它比仅使用缓存映射作为悬空组件引用更复杂,可能会带来风险。就像编程中的一切一样,这看起来是一个很好的策略,但反复试验总会发现需要改进的问题。谢谢,但我想说的是更详细的。我对Shai的回答更能说明问题