如何通过将长任务分解为子部分来执行它,并使用android中的子部分获得结果

如何通过将长任务分解为子部分来执行它,并使用android中的子部分获得结果,android,background-process,Android,Background Process,我正在为android实现一个电子书阅读器。我已经成功地完成了分页部分。但装入这本书需要很长时间。我所做的是,获取原始html并将其分解成各个章节,然后将它们存储在一个数组中。然后获取整个字符串,并使用Html.fromHtml删除Html标记(因为我使用的是view pager,需要获取页数,因此我们需要先删除不必要的字符串)。然后我就开始翻页了。(逻辑是获取子字符串并检查字符串高度是否大于屏幕高度,我在字符串中的每个空格处检查此条件) 我在这个项目中使用了epub lib库和jsoup。我正

我正在为android实现一个电子书阅读器。我已经成功地完成了分页部分。但装入这本书需要很长时间。我所做的是,获取原始html并将其分解成各个章节,然后将它们存储在一个数组中。然后获取整个字符串,并使用Html.fromHtml删除Html标记(因为我使用的是view pager,需要获取页数,因此我们需要先删除不必要的字符串)。然后我就开始翻页了。(逻辑是获取子字符串并检查字符串高度是否大于屏幕高度,我在字符串中的每个空格处检查此条件)

我在这个项目中使用了epub lib库和jsoup。我正在为此使用动态文本视图和图像视图

现在我需要优化这个过程。如何做到这一点?我的想法是加载并向用户显示初始页面,当用户浏览页面时,应使用后台进程对其余内容进行分页和加载

这可能吗?我也很高兴得到任何其他建议


谢谢

是的,这应该是可能的。我有一个类似的情况,我有一个ListView,它可能列出数据库中的数千项。我没有加载所有内容,而是简单地读取前9项,显示它们,然后在滚动到达列表底部时有一个侦听器,然后更新我的listview以包含接下来的9项

另外,从性能角度来看,如果您的书非常大,我建议您在
AsyncTask
中下载文件后立即进行此类解析工作。我会将书中的页面分解为不同的对象(即“页面”对象中的第1、2、3页),然后当需要显示该页面时,只需阅读并显示该对象即可。如果用户多次打开电子书,这也是有益的,因为每次打开电子书时,您不必再次解析整个html文件

逻辑如下:

  • 下载文本html
  • 删除格式并获取原始文本
  • 把课文分成几页
  • 将每一页(或几页一起)保存在“页面”对象中
  • 显示第一个“页面”对象
  • 用于滚动到页面末尾的侦听器
  • 显示下一个“页面”对象
  • 重复步骤6、7

  • 目前,我使用一个对象来表示包含TextView和ImageView的单个页面。所以为了代表整本书,我有一个单页对象的arrayList是的,这就是我要做的。但是为了提高性能,在当前页面滚动到底部之前,我不会添加到该ArrayList。(或者,如果您想让页面对象之间的转换看起来更无缝,请在底部前1页)此外,我会将这些对象保存在单独的文件或SQLite数据库中,这样您就不需要多次执行解析工作。另一件事是,当用户旋转设备时,必须从一开始就执行相同的过程(使文本适合该屏幕)这也需要时间。你对此有何建议?我也同意你的回答,但如果用户想跳转到书的后半部分的某个特定页面,这是不可能的。对吗?@chathura2020我会定义页面大小,使其与屏幕大小无关。如果页面大小超过屏幕大小,是的,你需要执行以下操作很少设置格式,以确保文本适合更改后的屏幕大小。(如果页面大于屏幕大小,您可能希望让用户滚动)