序列化性能和谷歌Android

Joh*_*ens 12 java performance serialization android

我正在寻找加快序列化性能的建议,特别是在使用谷歌Android时.对于我正在进行的项目,我试图将几百个对象从服务器转发到Android应用程序,并且我正在经历各个阶段以获得我需要的性能.

首先,我尝试了一个可怕的XML解析器,我使用Scanner专门针对这个项目进行了攻击,这在加载对象时造成了令人难以置信的缓慢性能(对于300KB文件约为5分钟).然后我离开了那个并使我的类实现Serializable并将我拥有的对象的ArrayList写入文件.将该文件读入到Android中,并且已经下载了文件,请注意~100KB序列化文件大约需要15-30秒.我仍然觉得这对于Android应用程序来说完全不可接受,因为我的应用程序需要在启动应用程序时加载数据.

我已经简要介绍了Externalizable以及它如何提高性能,但我不确定如何使用嵌套类实现它.现在,我正在尝试存储以下类的ArrayList,其下面是嵌套类.

public class MealMenu implements Serializable{
private String commonsName;
private long startMillis, endMillis, modMillis;
private ArrayList<Venue> venues;
private String mealName;
}
Run Code Online (Sandbox Code Playgroud)

和场地类:

public class Venue implements Serializable{
private String name;
private ArrayList<FoodItem> foodItems;
}
Run Code Online (Sandbox Code Playgroud)

和FoodItem类:

public class FoodItem implements Serializable{
private String name;
private boolean vegan;
private boolean vegetarian;
}
Run Code Online (Sandbox Code Playgroud)

IF Externalizable是提高性能的方法,有没有关于java在你尝试写出对象时如何调用对象中的方法的信息?我不确定是否需要在父类中实现它,也不知道如何在每个对象中序列化嵌套对象.

Com*_*are 10

永远不要Serializable跨架构使用.您无法知道Dalvik VM是否与服务器的Java版本具有兼容的序列化.即使它今天有效,也可能不会在任何一端进行升级.始终选择专为跨架构工作而设计的内容.

选项包括:

  • 协议缓冲区
  • Apache Thrift(有效负载包装,不一定是RPC的东西)
  • XML(您忽略了提到您使用的解析器 - 如果您使用DOM,请尝试SAX)
  • JSON(据说杰克逊JSON解析器比Android内置的org.json解析器更快)

此外,在应用启动时加载300K数据是一个麻烦的处方.请考虑利用SQLite允许您一次只处理所需的数据.

  • @ Jomanscool2"在这方面我们有什么可能做错的吗?" 一定要使用事务,而不仅仅是每个插入一个事务的默认值.例如,对事务进行100次插入的聚类应该有所帮助.对于随应用程序一起提供的数据,您可以发送一个实际的SQLite数据库并将其解压缩到手机上,以换取空间以提高速度.或者,您可以下载预先填充的SQLite数据库.所有这一切,写入闪存是缓慢和高度可变的. (2认同)