如果OS重新创建活动,则实例变量将设置为null

时间:2015-04-18 20:18:07

标签: android android-activity

我一直在努力解决这个问题已有一段时间了。

如果我在一天之后启动应用程序,我的主要活动的实例变量将设置为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();
    }
}

谢谢, 罗尼

1 个答案:

答案 0 :(得分:0)

Android会根据需要终止或释放后台应用程序的内存。因此,您需要在应用程序进入后台时保持其状态。

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