Android 如果操作系统重新创建活动,实例变量将设置为null
我已经为这个问题挣扎了很长一段时间了 如果我在一天后启动应用程序,我的主要活动的实例变量将设置为null。所以,对于我的用户来说,每隔一天应用程序就会崩溃一次,然后重新启动。我假设在第二天启动应用程序时,活动被终止并重新创建 基本上,可能发生的情况是由于“onsavedinstance”重新创建了视图,但这些视图所需的数据还不可用,因为我没有将数据存储在捆绑包中 我怎样才能预防它?我不倾向于将每个变量都存储在bundle中,因为这是一个糟糕的设计。最好的方法是什么 这是我的密码: 基本上,我试图在“onCreate”上从服务器填充引导数据(dataWrapper)。我在后续代码中使用此数据对象。在第一次应用发布时一切正常。但当用户在一天或7-8小时后打开应用程序时,对象“dataWrapper”结果为空Android 如果操作系统重新创建活动,实例变量将设置为null,android,android-activity,Android,Android Activity,我已经为这个问题挣扎了很长一段时间了 如果我在一天后启动应用程序,我的主要活动的实例变量将设置为null。所以,对于我的用户来说,每隔一天应用程序就会崩溃一次,然后重新启动。我假设在第二天启动应用程序时,活动被终止并重新创建 基本上,可能发生的情况是由于“onsavedinstance”重新创建了视图,但这些视图所需的数据还不可用,因为我没有将数据存储在捆绑包中 我怎样才能预防它?我不倾向于将每个变量都存储在bundle中,因为这是一个糟糕的设计。最好的方法是什么 这是我的密码: 基本上,我试图
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//other initialization code
getData();
//remaining code
}
protected DataWrapper dataWrapper;
private void getData(){
try {
//url for fetching data
String url = "http://....."
new FetchAndPopulateMarketDataAsyncTask(this){
@Override public void onPostExecute(DataWrapper result)
{
if(result==null){
//server or no internet error
}
else{
dataWrapper = (DataWrapper)result;
}
}
}.execute(new URL(url));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
谢谢,
Rony将根据需要关闭或释放后台应用程序的内存。所以,当应用程序进入后台时,您需要维护它的状态
尝试重写onSaveInstanceState和onRestoreInstanceState以保存和还原这些实例变量的值。请发布活动代码将应用程序状态保存到持久化存储(例如SharedReferences或sqlite),并将其加载到主活动的onResume()方法中。如果没有看到你的代码,很难说得更多。谢谢你给我指明了正确的方向。。但是存储实例变量的好方法是什么?我有这么多这样的变量,如果分别存储和恢复它们,可能会很糟糕,并且容易出错。