优化Android文件编写

时间:2014-11-16 19:52:40

标签: android file-io

我目前正在编写一个记录加速度计的Android应用程序。 (此时它是一个测试应用程序,因此我可以对算法进行原型设计。

要从30分钟的记录中写出SensorEventStore的列表(这只是将SensorEvent中的数据存储到SD卡的一种方式),请将GUI锁定写文件时20 - 30秒。

我使用以下代码将文件写入SD卡。

@Override
public void onMessage(Messages message, Object param[]) {
    if(message == IDigest.Messages.SaveData) {
        File folder = (File) param[0];

        File accFileAll = new File(folder, startTime + "_all.acc");

        FileWriter accFileWriterAll;

        try {
            accFileWriterAll = new FileWriter(accFileAll);
        } catch (IOException e) {
            accFileWriterAll = null;
        }

        for(Iterator<SensorEventStore> i=eventList.iterator(); i.hasNext();) {
            SensorEventStore e = i.next();

            if(accFileWriterAll != null) {
                try {
                    accFileWriterAll.write(
                        String.format(
                            "%d,%d,%f,%f,%f\r\n",
                            e.timestamp,
                            e.accuracy,
                            e.values[0],
                            e.values[1],
                            e.values[2]
                        )
                    );

                    accFileWriterAll.flush();
                } catch (IOException ex) {

                }
            }
        }

        new SingleMediaScanner(RunBuddyApplication.Context, accFileAll);
    }
}

任何人都可以给我任何指示,使其不会锁定UI,或者不必花费当前写出文件所需的时间。

1 个答案:

答案 0 :(得分:0)

首先,您应该尝试在后台执行此操作。 AsyncTask非常适合这项任务。

除此之外,您应该删除flush()语句,并且错​​误地close()您的文件编写者。 flush导致数据以相当小的部分写入磁盘,这非常慢。如果您将文件写入器留给自己的刷新,它将自行确定缓冲区大小。正确关闭FileWriter后,其余数据也应写入磁盘。

另外,你可以看看&#34;尝试使用资源&#34;对于你的文件编写者,但这是可选的。