如何防止活动重新加载后退动作

时间:2011-06-24 07:43:02

标签: android reload

我有连接到互联网以获取数据的应用。我可以访问多级数据。

所以,让我说从第3级开始,在第4级开始,我决定回去,每当我按下之前的活动时,重新加载来自互联网的数据。

有可能阻止这种情况吗?

我试图以单顶模式运行活动。

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));