Android 如果操作系统重新创建活动,实例变量将设置为null

Android 如果操作系统重新创建活动,实例变量将设置为null,android,android-activity,Android,Android Activity,我已经为这个问题挣扎了很长一段时间了 如果我在一天后启动应用程序,我的主要活动的实例变量将设置为null。所以,对于我的用户来说,每隔一天应用程序就会崩溃一次,然后重新启动。我假设在第二天启动应用程序时,活动被终止并重新创建 基本上,可能发生的情况是由于“onsavedinstance”重新创建了视图,但这些视图所需的数据还不可用,因为我没有将数据存储在捆绑包中 我怎样才能预防它?我不倾向于将每个变量都存储在bundle中,因为这是一个糟糕的设计。最好的方法是什么 这是我的密码: 基本上,我试图

我已经为这个问题挣扎了很长一段时间了

如果我在一天后启动应用程序,我的主要活动的实例变量将设置为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();
    }
}
谢谢,
Rony将根据需要关闭或释放后台应用程序的内存。所以,当应用程序进入后台时,您需要维护它的状态


尝试重写onSaveInstanceState和onRestoreInstanceState以保存和还原这些实例变量的值。

请发布活动代码将应用程序状态保存到持久化存储(例如SharedReferences或sqlite),并将其加载到主活动的onResume()方法中。如果没有看到你的代码,很难说得更多。谢谢你给我指明了正确的方向。。但是存储实例变量的好方法是什么?我有这么多这样的变量,如果分别存储和恢复它们,可能会很糟糕,并且容易出错。