我有一个 ArrayListallFeeds
和一个读取序列化数据的方法。
@SuppressWarnings("unchecked")
public void loadFile() {
final String FILENAME = "feeds.ser";
File file = fileContext.getApplicationContext().getFileStreamPath(FILENAME);
try {
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
allFeeds = (ArrayList<Feed>) ois.readObject();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
序列化数据存储在一个 0.49mb 大小的文件中,由 33 个 Feed 对象组成。Feed 对象的结构如下,其中 HashMap 最多可保存 900 个键对值:
int id;
String name;
int datatype;
String tag;
Long time;
Double value;
String dpInterval;
HashMap<Long, Double> historicFeedData;
将数据加载回数组列表需要相当长的时间(平均时间为 13.5 秒)。GC_CONCURRENT 在执行期间反复释放内存。
有没有办法提高这个操作的速度,或者仅仅是它正在处理的数据量?如果是这样,是否建议将其推送到 aSyncTask 或后台服务中?