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