我有连接到互联网以获取数据的应用。我可以访问多级数据。
所以,让我说从第3级开始,在第4级开始,我决定回去,每当我按下之前的活动时,重新加载来自互联网的数据。
有可能阻止这种情况吗?
我试图以单顶模式运行活动。
答案 0 :(得分:2)
将数据加载代码移动到single-exec事件:onStart或
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState == null) {
// here
}
}
答案 1 :(得分:2)
这里有很多选择。
更简单的方法是避免在切换到另一个activity
时停止startActivity()
。当您通过onPause()
转到第4级时,您的onResume()
会在第3级活动中被调用,但它会继续在后台生效。然后当你从3回来时,resume
被召唤。
因此,只要您不在[{1}}上加载数据,也不在finish()
level 3 activity
加载数据,那么您应该没问题。如果系统资源非常短暂,那么第3级活动可能被杀死(虽然这种情况非常罕见)并且当你回到它时重新启动,但如果它发生则意味着系统需要内存对于重要的事情,重新加载可能很好。
现在,还有其他方式。如上所述,这通常要好得多,但如果由于某种原因你想完成3级活动,以下是你的选择。
如前所述,您可以选择将数据转储到某个地方。保存的实例状态是一个选项 - 但如果它的数据很重,超过几千字节,则不建议使用。 想法,您将数据保存在Bundle的onSaveInstanceState()
中,并在onCreate()
中恢复。
如果数据量很大,最好将其转储到缓存文件中。
如果您有数据模型,并希望在多个活动中使用相同的数据,可能是小部件,甚至可能是不同的应用,您可能需要考虑构建ContentProvider
来提供数据。它将独立于应用程序的其他部分生存,并管理对数据的访问。其他部分会查询它们需要的数据。
关于这一点的巧妙之处在于,它将数据从程序的其余部分抽象出来。它可以从任何地方访问和缓存策略,一切都在专门的地方处理。缺点是,它复杂得多。
答案 2 :(得分:1)
一种可能的解决方案是与州合作。你基本上有一个布尔值,表明你的活动是否已经执行了某个动作。
如果执行了该操作,则无法再次访问该代码。当然,该标志必须保存在Application上下文或SharedPreferences中。
答案 3 :(得分:1)
您可以将此参数添加到意图中以防止重新加载。
//intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(new Intent(this,My.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));