我一直在努力解决这个问题已有一段时间了。
如果我在一天之后启动应用程序,我的主要活动的实例变量将设置为null。因此,对于我的用户,每隔一天应用程序崩溃一次,然后重新启动就好了。我假设活动被杀死并重新创建,并在第二天启动应用程序。
基本上,可能发生的事情是由于" onsavedinstance"视图正在重新创建,但这些视图所需的数据尚不可用,因为我没有将数据存储在包中。
我该如何预防呢?我并不倾向于将每个变量存储在bundle中,因为它是一个糟糕的设计。最好的方法是什么?
这是我的代码:
基本上我正试图在" onCreate"上从服务器填充我的引导数据(dataWrapper)。我在后续代码中使用此数据对象。所有在第一次应用程序启动时都可正但是当用户在一天或7-8小时后打开应用程序时,对象" dataWrapper"原来是空的。
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();
}
}
谢谢, 罗尼
答案 0 :(得分:0)
Android会根据需要终止或释放后台应用程序的内存。因此,您需要在应用程序进入后台时保持其状态。
尝试重写onSaveInstanceState和onRestoreInstanceState以保存和恢复这些实例变量的值。