我目前正在编写一个记录加速度计的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,或者不必花费当前写出文件所需的时间。
答案 0 :(得分:0)
首先,您应该尝试在后台执行此操作。 AsyncTask非常适合这项任务。
除此之外,您应该删除flush()
语句,并且错误地close()
您的文件编写者。 flush
导致数据以相当小的部分写入磁盘,这非常慢。如果您将文件写入器留给自己的刷新,它将自行确定缓冲区大小。正确关闭FileWriter
后,其余数据也应写入磁盘。
另外,你可以看看&#34;尝试使用资源&#34;对于你的文件编写者,但这是可选的。