Java 初始化Gson对象的最佳方法
在以下两个选项中,您更喜欢哪一个来初始化Gson对象?有人能帮助我了解这两种方式对Android应用程序性能的影响(启动时间?),如果有的话Java 初始化Gson对象的最佳方法,java,android,performance,gson,Java,Android,Performance,Gson,在以下两个选项中,您更喜欢哪一个来初始化Gson对象?有人能帮助我了解这两种方式对Android应用程序性能的影响(启动时间?),如果有的话 // inline creation private final Gson gson = new Gson(); vs 好的,从你的问题来看,你在问哪个方法是处理json数据最好的方法 因此,我建议你有两个选择 让我知道哪个最适合你 快乐编码 这取决于您,但是使用私有静态final来处理这个问题没有什么错。你可以在这里阅读更多关于它的信息 如果gso
// inline creation
private final Gson gson = new Gson();
vs
好的,从你的问题来看,你在问哪个方法是处理json数据最好的方法 因此,我建议你有两个选择 让我知道哪个最适合你
快乐编码 这取决于您,但是使用
私有静态final
来处理这个问题没有什么错。你可以在这里阅读更多关于它的信息
如果gson对象不是静态的,那么不必检查gson是否为null。若您确定gson将经常使用,那个么内联选项更好(无空检查)。如果gson的使用太少,第二个选项可能更好。很多“如果”: 另一方面,初始化gson需要多少毫秒?我认为你不需要考虑在这种情况下的表现。 < P>检查这个。
public static Gson gson;
public Constructor() {
}
public static Gson getInstance() {
if (gson == null) {
gson = new Gson();
}
return gson;
}
您只需调用
getInstance()
函数即可初始化gson对象,以便随时使用。每次它都不会初始化新的Gson
对象和重用旧的初始化对象。我个人将其作为Dagger2单例模块:
@Module
public class GsonModule {
@Provides
@Singleton
public Gson providesGson() {
Gson gson = new GsonBuilder()
.setExclusionStrategies(new ExclusionStrategy() { //Realm workaround
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getDeclaringClass().equals(RealmObject.class);
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
}).create();
return gson;
}
}
@Module
public class ApplicationModule {
private final CustomApplication application;
public ApplicationModule(CustomApplication application) {
this.application = application;
}
@Provides
@Singleton
public CustomApplication application() {
return this.application;
}
}
@Singleton
@Component(modules = {GsonModule.class, ApplicationModule.class})
public interface ApplicationComponent {
void inject(MainActivity mainActivity);
//exposed to sub-modules.
CustomApplication application();
}
@模块
公共类gson模块{
@提供
@独生子女
公共Gson提供Gson(){
Gson Gson=new GsonBuilder()
.setExclutionStrategies(新的ExclutionStrategies(){//Realm解决方案
@凌驾
公共布尔值shouldSkipField(字段属性f){
返回f.getDeclaringClass().equals(RealmObject.class);
}
@凌驾
公共布尔shouldSkipClass(类clazz){
返回false;
}
}).create();
返回gson;
}
}
@模块
公共类应用程序模块{
私人最终客户申请;
公共应用程序模块(自定义应用程序){
这个应用程序=应用程序;
}
@提供
@独生子女
公共自定义应用程序(){
返回此应用程序;
}
}
@独生子女
@组件(模块={GsonModule.class,ApplicationModule.class})
公共接口应用程序组件{
无效注入(MainActivity MainActivity);
//暴露于子模块。
自定义应用程序();
}
但从技术上讲,这就像在某个地方有一个单一对象。一个实例化一个新对象,另一个是。。。错误,因为它有两个回报 如果代码中没有上述问题,第一个更好,因为在第二个中
return gson == null ? gson = new Gson() : gson;
它有一个开销空检查,每次请求gson对象时都必须执行。然而,这与Gson无关。这对于任何其他实例化都是一样的。因此,您可以使用第一个选项,在Gson方面,考虑的因素是是否最好使用具有更多自定义项的
new Gson()
或GsonBuilder.create()
不,我是问什么是“初始化Gson对象的最佳方法”。这可能发生在我的应用程序生命周期中,即当用户打开应用程序,执行某些操作时,我可能不需要解析任何Json数据。当您有数据时,然后初始化Json对象!从任何地方,但确保你有一个数据!!此gson将用作单个实例。
@Module
public class GsonModule {
@Provides
@Singleton
public Gson providesGson() {
Gson gson = new GsonBuilder()
.setExclusionStrategies(new ExclusionStrategy() { //Realm workaround
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getDeclaringClass().equals(RealmObject.class);
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
}).create();
return gson;
}
}
@Module
public class ApplicationModule {
private final CustomApplication application;
public ApplicationModule(CustomApplication application) {
this.application = application;
}
@Provides
@Singleton
public CustomApplication application() {
return this.application;
}
}
@Singleton
@Component(modules = {GsonModule.class, ApplicationModule.class})
public interface ApplicationComponent {
void inject(MainActivity mainActivity);
//exposed to sub-modules.
CustomApplication application();
}
return gson == null ? gson = new Gson() : gson;