2011-06-24 51 views
1

我有应用程序连接到互联网来获取数据。我可以访问多层次的数据。如何防止活动重新加载回来的行动

因此,让我说我从第3级开始,第4级我决定回去,只要我按回前一个活动重新加载从互联网上的数据。

有没有可能阻止?

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

回答

2

移动数据加载代码到单EXEC事件:在onStart或

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if(savedInstanceState == null) { 
     // here 
    } 
} 
1

一种可能的解决办法是用状态工作。你基本上有一个布尔值,它表示你的活动是否执行了某个动作。

如果执行了操作,它将不会再次到达该代码。当然,该标志必须保存在Application上下文或SharedPreferences中的某个地方。

2

这里有很多选项。 最简单的方法是避免在切换到另一个时停止activity。当您通过startActivity()进入第4级时,您的onPause()在第3级活动上被调用,但它继续在后台生活。然后当你从3回来时,onResume()被调用。 所以只要你不加载数据resumefinish()你的level 3 activity,你应该没问题。如果系统资源非常短,那么级别3的活动可能是遇难(虽然这非常罕见),当您回到它时重新启动,但如果发生这种情况,则意味着系统需要内存来处理重要的事情,并且它是大概很好重新加载。

现在,还有其他方式。如上所述,通常要好得多,但如果因为某种原因想要完成第3级活动,则可以使用以下这些选项。如前所述,您可能会选择将数据转储到某处。保存的实例状态是一个选项 - 但如果数据量很大,超过几千字节,则不推荐。 想法是,您将数据保存在onSaveInstanceState()的Bundle中并将其恢复到onCreate()。 如果数据量很大,最好将其转储到缓存文件中。

如果你有一个数据模型,并希望在多个活动中使用相同的数据,可能是一个小部件,甚至可能是一个不同的应用程序,你可能需要考虑构建一个ContentProvider来提供数据。它将独立于应用程序的其他部分而生活,并管理对数据的访问。其他部分将查询它们需要的数据。

关于这个问题的简单之处在于,它将数据从程序的其余部分中抽象出来。它可以从任何地方访问和缓存策略,一切都在专门的地方处理。缺点是,它显得更复杂。

+0

感谢您的回答!如前面的问题所述,我使用了onSaveInstanceState()! –

0

您可以将此参数添加到您的意图以防止重新加载。

//intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(new Intent(this,My.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
相关问题