【问题标题】:Android: AsyncTask and continuous file IOAndroid:AsyncTask 和连续文件 IO
【发布时间】:2011-07-25 21:53:43
【问题描述】:

我正在尝试使用AsyncTask 定期读取文件。该文件在我要读取的每个行间隔之间有一个硬编码的“EOL”类型分隔符。我当前的实现涉及AsyncTask 使用BufferedReader 读取第一个行间隔,直到它接近EOL 标记,然后使用publishProgress() 对UI 进行一些更新,等待一段时间,然后应该继续下一段文字。

我的问题如下:如何在使用AsyncTask 的同时完成移动到下一个文本间隔?似乎我必须为每个间隔在BufferedReader 上继续调用new(),这反过来又重置了我在文件中的位置。我可以使用任何替代库吗?请注意,我需要保留 AsyncTask,因为我试图模拟每 X 秒从实时源流式传输的数据。

如果需要我可以提供一些代码,但这主要是一个高级设计问题。

【问题讨论】:

    标签: java android io android-asynctask bufferedreader


    【解决方案1】:

    保留一个长变量来保存您的字节数并使用 skip(long bytecount) 方法。

    或者将 AsyncTask 子类化并给它一个静态 BufferedReader 作为成员字段

    【讨论】:

    • 谢谢,所有三个答案都是可行的解决方案,但你的答案是最简洁的。
    【解决方案2】:

    AsyncTask 旨在完成“整体”任务,而不是“部分”任务。虽然可以强迫它以这种方式做事,但它可能并不容易。我建议使用稍微不同的设计,以便更有效地使用 AsyncTask。将 BufferedReader 保留为文件状态的一部分并将其传递给 AsyncTask 以仅计算上次读取和下次读取之间的差异。

    【讨论】:

      【解决方案3】:

      在 AsynTask 的 doInBackground 实现中有一个循环,然后在每个循环结束时(当您到达 EOL 时)调用 Activity.runOnUiThread(Runnable) 来更新 UI。这样一来,您就永远不会在后台留下 do 并且您不必失去对您职位的参考。

      另一种选择是使用Handler

      【讨论】:

        猜你喜欢
        • 2019-08-09
        • 2015-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-01
        • 2010-09-22
        相关资源
        最近更新 更多