Android 改装回调和saveinstanceState

Android 改装回调和saveinstanceState,android,retrofit2,Android,Retrofit2,我对2回调和onSaveInstanceState有疑问。我想将两个变量的状态,var1和var2保存在onSaveInstanceState中。这两个变量(实际上不是简单变量)在onResponse方法中的改型回调中获取它们的值。它只持续几毫秒,但如果我在onResponse中获取这两个变量的值之前旋转设备,应用程序就会崩溃。我不太清楚如何处理这种情况。我想知道你在这方面的做法,以避免崩溃。(实际上,我有两个改装回调,它们彼此独立,一个用于绘制图形,另一个用于在文本视图中显示数据)。提前感谢,

我对2回调和onSaveInstanceState有疑问。我想将两个变量的状态,var1var2保存在onSaveInstanceState中。这两个变量(实际上不是简单变量)在onResponse方法中的改型回调中获取它们的值。它只持续几毫秒,但如果我在onResponse中获取这两个变量的值之前旋转设备,应用程序就会崩溃。我不太清楚如何处理这种情况。我想知道你在这方面的做法,以避免崩溃。(实际上,我有两个改装回调,它们彼此独立,一个用于绘制图形,另一个用于在文本视图中显示数据)。提前感谢,并原谅我的英语语言能力差

  @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("var1",var1);
        outState.putInt("var2",var2);

   }

  retrofitcallback() {
       return new Callback<T>() {
                    public void onResponse() {
                       var1=...
                       var2=...
                    }
                    public void onFailure() {
                    }
       };
    }
@覆盖
SaveInstanceState上的公共无效(束超出状态){
super.onSaveInstanceState(超出状态);
突出。putInt(“var1”,var1);
突出。putInt(“var2”,var2);
}
修改回调(){
返回新的回调函数(){
公共响应(){
var1=。。。
var2=。。。
}
公共失效(){
}
};
}

首先,应用程序可能会崩溃,因为var1和var2是空值

更重要的是,我建议您考虑一下客户机-服务器的设计。您在UI类中使用回调和改装调用——这是一种糟糕的方法,因为它会导致内存泄漏,并且几乎不可能管理生命周期。考虑使用加载器或服务,它会更好,也更容易。


注意:当应用程序崩溃时,始终提供stacktrace。

首先,应用程序可能会崩溃,因为var1和var2是空值

更重要的是,我建议您考虑一下客户机-服务器的设计。您在UI类中使用回调和改装调用——这是一种糟糕的方法,因为它会导致内存泄漏,并且几乎不可能管理生命周期。考虑使用加载器或服务,它会更好,也更容易。


另外,当应用程序崩溃时,请始终提供stacktrace。

谢谢您的回答。我不能使用加载程序,因为我没有使用数据库。关于服务,我想你指的是IntentService,我以前也想过,但我不太了解使用服务的好处,我仍然需要将服务的结果保存在变量中并在onSaveInstanceState中使用,如果用户在服务完成之前旋转屏幕,我也会遇到同样的问题,不是吗?你也可以使用没有数据库的加载程序。带有LoaderManager的Loader负责活动/片段生命周期。您只需在loader onForceLoad方法和改装回调调用deliverResult中发送请求。活动重新启动时,不会销毁所有数据。您可以通过服务实现相同的功能(常规服务或IntentService-无所谓),但检索结果会更加困难。Otto/EventBus作为可能的变体。感谢您的回答。我不能使用加载程序,因为我没有使用数据库。关于服务,我想你指的是IntentService,我以前也想过,但我不太了解使用服务的好处,我仍然需要将服务的结果保存在变量中并在onSaveInstanceState中使用,如果用户在服务完成之前旋转屏幕,我也会遇到同样的问题,不是吗?你也可以使用没有数据库的加载程序。带有LoaderManager的Loader负责活动/片段生命周期。您只需在loader onForceLoad方法和改装回调调用deliverResult中发送请求。活动重新启动时,不会销毁所有数据。您可以通过服务实现相同的功能(常规服务或IntentService-无所谓),但检索结果会更加困难。Otto/EventBus作为可能的变体。