【问题标题】:How to prevent activity to reload on back action如何防止活动在后台操作时重新加载
【发布时间】:2011-09-21 19:56:35
【问题描述】:

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

假设我从第 3 级开始,在第 4 级我决定返回,每当我按下返回时,上一个活动都会重新加载来自互联网的数据。

有没有办法防止这种情况发生?

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

【问题讨论】:

    标签: android reload


    【解决方案1】:

    将数据加载代码移动到single-exec事件:onStart或

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

    【讨论】:

      【解决方案2】:

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

      现在,还有其他方法。按照我上面的描述,这样做通常要好得多,但是如果出于某种原因你想完成你的 3 级活动,这里是你的选择。 如前所述,您可以选择将数据转储到某个地方。保存的实例状态是一个选项 - 虽然如果它是大量数据,超过几千字节,则不建议这样做。 想法是,您将数据保存在 Bundle 中的 onSaveInstanceState() 中,然后将其恢复到 onCreate() 中。 如果是大量数据,最好将其转储到缓存文件中。

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

      巧妙的是,它将数据从程序的其余部分中抽象出来。它可以从任何地方和缓存策略访问,一切都在一个专门的地方处理。缺点是,它要复杂得多。

      【讨论】:

      • 感谢您的回答!我使用了上一个问题中描述的 onSaveInstanceState()!
      【解决方案3】:

      一种可能的解决方案是与州合作。您基本上有一个布尔值,指示您的活动是否执行了某个操作。

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

      【讨论】:

        【解决方案4】:

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

        //intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(new Intent(this,My.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-27
          • 1970-01-01
          • 1970-01-01
          • 2019-01-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多