出于以下两个选项,您更喜欢哪一个初始化Gson对象?有人可以帮我理解两种方式对Android应用程序性能的影响(启动时间吗?),如果有的话。
// inline creation
private final Gson gson = new Gson();
VS
// need base creation, overhead of sync everytime while accessing gson object
private synchronized Gson getOrCreateGson() {
gson == null ? gson = new Gson() : gson;
return gson.fromJson(jsonString, clazz);
}
答案 0 :(得分:7)
由您决定,private static final
处理此问题并没有错。您可以在此related question了解更多相关信息。
private static final Gson gson = new Gson();
答案 1 :(得分:0)
好的,从你的问题来看,你问的是处理json数据的方法是哪种方法!
然后为此我建议你2个选项!!
让我知道哪种方式最适合你!!
快乐的编码!!
答案 2 :(得分:0)
如果你的gson对象不是静态的,那么你不必检查gson是否为null。如果你确定经常使用gson,那么内联选项会更好(没有空检查)。如果gson使用太稀疏,第二个选项可能更好。很多“如果”:)
另一方面,初始化gson需要多少毫秒?我认为在这种情况下你不需要考虑性能。
答案 3 :(得分:0)
检查一下。
public static Gson gson;
public Constructor() {
}
public static Gson getInstance() {
if (gson == null) {
gson = new Gson();
}
return gson;
}
您只需调用getInstance()
函数即可获取已初始化的gson对象以供使用。每次它都不会初始化新的Gson
对象并重用旧的初始化对象。
答案 4 :(得分:0)
我个人认为它是Dagger2 Singleton模块:
@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();
}
但从技术上讲,就像在某个地方拥有一个单独的单个对象一样。
答案 5 :(得分:0)
一个实例化一个新对象,另一个是...错误,因为它有两个返回。
如果您的代码中没有上述问题,那么第一个问题就更好了,因为在第二个问题上你有
return gson == null ? gson = new Gson() : gson;
有一个开销空检查,每次请求gson对象时都必须完成。然而这与Gson无关。对于任何其他实例化,这都是相同的。所以你可以使用第一个就好了,就Gson而言,如果使用具有更多自定义的new Gson()
或GsonBuilder.create()
会更好。