recherche

Maison  >  Questions et réponses  >  le corps du texte

android - 如何避免activity再次启动时又一次初始化数据

本人写了一个activity初始化了一些数据,而在另一个activity改变数据后返回时,发现数据又再一次被初始化,有什么办法可以改变这种情况吗?


初始化数据是在onCreate()

PHP中文网PHP中文网2771 Il y a quelques jours1225

répondre à tous(13)je répondrai

  • PHP中文网

    PHP中文网2017-04-17 17:36:18

    我这样理解,你看对不对:
    比如说两个activity,分别是A和B,有部分数据是A和B都可以修改的,我们将这部分的数据部分称为共享数据。
    首先A做对共享数据做初始化,然后A启动B,B又修改了共享数据。B返回时,再在A中查看共享数据,发现还是最初的初始化数据,不是我们期望的B中修改后的数据。
    一个可能的原因是:A启动B之后,A被destroy了。这个可以通过跟踪日志信息来确认。
    B返回时,系统又将A启动了,但是A会再次执行onCreate(),而onCreate()中将共享数据又做了一遍初始化,此时查看,就还是最初的初始化数据。
    解决办法:使用onSavedInstance()保存共享数据,在onCreate()中使用保存的共享数据。
    我以一个字符串FileUri为共享数据做例子:

    保存数据的地方:

    @Override  
    protected void onSaveInstanceState(Bundle outState) {  
        // TODO Auto-generated method stub  
        if(FileUri!=null){            
            outState.putString("FileUri", imageFileUri.toString());
        }
        super.onSaveInstanceState(outState);  
    } 
    

    使用保存的数据:

    @Override
    protected void onCreate(Bundle savedInstanceState) {        
        super.onCreate(savedInstanceState);        
        if (savedInstanceState != null ) {              
            String str=savedInstanceState.getString("FileUri");
            if(str!=null)
            {
                FileUri = Uri.parse(str);
            }            
        }    
        else {
        //初始化共享数据
        }
        //其他初始化工作
    }

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:36:18

    首先你要确认一下初始化数据是否只放在onCreate里面一处?如果是,那应该由于异常情况引起此Activity被回收掉,再次进入此Activity则会重新初始化数据一次!

    répondre
    0
  • PHPz

    PHPz2017-04-17 17:36:18

    若只是不让其初始化, 只要对其保活就OK, 至于后面一个activity对数据的操作做好与第一个activity的通信就OK

    répondre
    0
  • Annulerrépondre