扫码关注官方订阅号
本人写了一个activity初始化了一些数据,而在另一个activity改变数据后返回时,发现数据又再一次被初始化,有什么办法可以改变这种情况吗?
初始化数据是在onCreate()
认证0级讲师
把初始化数据操作放在onCreate方法里面,你可能是放在onResume里面了。
首先现象是数据又被初始化了,所以解决方案如下:1,思考数据为何又被初始化,就如楼上所说,可能你在OnResume(),OnStart(),方法里面初始化2,产生问题的原因就是数据多次初始化,因此可以为数据初始化增加多次调用的功能,用面向对象的思路封装一下初始化数据,和单利模式有那么点点像,这样的好处是解决多次执行可能产生的问题,
如果每次你的Activity都destroy了话,那么你把初始化的程序放到onCreate中自然达不到你想要的结果。所以你还是先打下log看下你Activity的生命周期。
Activity
destroy
onCreate
log
你每次进入页面的时候,判断数据是否已经存在,如果已经存在,就使用缓存,不要请求网络加载数据了。
打日志,再结合android生命周期函数,问题基本就解决了
说明你的activity被干掉了,考虑下原因
通常情况Activity被销毁才会重新调用onCreate,查看一下当前Activity的启动模式和另一个Activity的启动模式。
可以考虑一下你的Activity的启动模式,4款启动模式,总有一款适合你
onSavedInstance()onRestoreInstance()
我这样理解,你看对不对:比如说两个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 { //初始化共享数据 } //其他初始化工作 }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
把初始化数据操作放在onCreate方法里面,你可能是放在onResume里面了。
首先现象是数据又被初始化了,所以解决方案如下:
1,思考数据为何又被初始化,就如楼上所说,可能你在OnResume(),OnStart(),方法里面初始化
2,产生问题的原因就是数据多次初始化,因此可以为数据初始化增加多次调用的功能,用面向对象的思路封装一下初始化数据,和单利模式有那么点点像,这样的好处是解决多次执行可能产生的问题,
如果每次你的
Activity都destroy了话,那么你把初始化的程序放到onCreate中自然达不到你想要的结果。所以你还是先打下log看下你Activity的生命周期。你每次进入页面的时候,判断数据是否已经存在,如果已经存在,就使用缓存,不要请求网络加载数据了。
打日志,再结合android生命周期函数,问题基本就解决了
说明你的activity被干掉了,考虑下原因
通常情况Activity被销毁才会重新调用onCreate,查看一下当前Activity的启动模式和另一个Activity的启动模式。
可以考虑一下你的Activity的启动模式,4款启动模式,总有一款适合你
onSavedInstance()
onRestoreInstance()
我这样理解,你看对不对:
比如说两个activity,分别是A和B,有部分数据是A和B都可以修改的,我们将这部分的数据部分称为共享数据。
首先A做对共享数据做初始化,然后A启动B,B又修改了共享数据。B返回时,再在A中查看共享数据,发现还是最初的初始化数据,不是我们期望的B中修改后的数据。
一个可能的原因是:A启动B之后,A被destroy了。这个可以通过跟踪日志信息来确认。
B返回时,系统又将A启动了,但是A会再次执行onCreate(),而onCreate()中将共享数据又做了一遍初始化,此时查看,就还是最初的初始化数据。
解决办法:使用onSavedInstance()保存共享数据,在onCreate()中使用保存的共享数据。
我以一个字符串FileUri为共享数据做例子:
保存数据的地方:
使用保存的数据: