0

今、私はリーダーを開発しています。txt ファイルが大きすぎると、読み取りに時間がかかり、応答がなくなります。そこで、お風呂でtxtファイルを読み込めるようなメソッドを設定したいと思います。

以下のコードを書きます。ページを戻すことができます。ただし、連続してページアップすることはできません。どうすればいいですか?

 Vector string; 
 int begin = 0;

 public void readTxtByPage(String fileName) {
        string.clear();
        FileReader fr  = null;
        BufferedReader br = null;
        try {
            fr = new FileReader(filePath + fileName);
            br = new BufferedReader(fr);
            br.skip(begin);
            String content = "";
            char ch;
            int line = 0;
            int w;
            int len;
            int start;
            FontMetrics fm = paint.getFontMetrics();
            fontHeight = (int) Math.ceil(fm.descent - fm.top) + 2;
            pageLineNum = textHeight / fontHeight;
            float[] widths = new float[1];
            while ((content = br.readLine()) != null) {
                len = content.length();
                w = 0;
                start = 0;
                for (int i = 0; i < len; i++) {
                    ch = content.charAt(i);
                    paint.getTextWidths(String.valueOf(ch), widths);
                    w += Math.ceil(widths[0]);
                    if (w > textWidth) {
                        string.addElement(content.substring(start, i));
                        begin += (i - start);
                        start = i;
                        w = 0;
                        line++;
                        if (line >= pageLineNum) {
                            System.out.println("begin===>"+begin);
                            return;
                        }
                    }
                }
                string.addElement(content.substring(start));
                begin += (len + 2 - start);
                line++;
                if (line >= pageLineNum) {
                    return;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                br.close();
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return;
    }

前もって感謝します!

4

1 に答える 1

0

バックグラウンド スレッドでこの作業を行った場合に最適なように思えます。リーダーにスリープを指示し、スレッドが再び読み取りを開始するときに通知することができます。そうすれば、UI がフリーズせず、ビットをバッチで読み取ることができます。おそらく、onTouchEvent 中にスレッドに通知する必要があります。

于 2013-01-07T08:30:51.007 に答える