Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 初始化Gson对象的最佳方法_Java_Android_Performance_Gson - Fatal编程技术网

Java 初始化Gson对象的最佳方法

Java 初始化Gson对象的最佳方法,java,android,performance,gson,Java,Android,Performance,Gson,在以下两个选项中,您更喜欢哪一个来初始化Gson对象?有人能帮助我了解这两种方式对Android应用程序性能的影响(启动时间?),如果有的话 // inline creation private final Gson gson = new Gson(); vs 好的,从你的问题来看,你在问哪个方法是处理json数据最好的方法 因此,我建议你有两个选择 让我知道哪个最适合你 快乐编码 这取决于您,但是使用私有静态final来处理这个问题没有什么错。你可以在这里阅读更多关于它的信息 如果gso

在以下两个选项中,您更喜欢哪一个来初始化Gson对象?有人能帮助我了解这两种方式对Android应用程序性能的影响(启动时间?),如果有的话

// 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;