【问题标题】:How can i keep an activity alive, if it's the solution如果这是解决方案,我如何让活动保持活力
【发布时间】:2017-03-20 14:26:53
【问题描述】:

所以我有两个活动,一个主要活动,一个次要活动,我们将它们称为活动_A(主要)和活动 B(第二个)。 所以我的 activity_A 正在获取一些数据,然后使用以下代码将其发送到 activity_B:

Intent i = new Intent(this,activity_B.class);
        i.putExtra("Charge_Batterie", bat);
        startActivity(i);

activity_B 使用此代码正确接收它:

String bat = getIntent().getStringExtra("Charge_Batterie");

我的问题是我的 activity_A 正在刷新它的值“bat”,所以当我有意发送它时,它不会在 activity_B 中刷新。 所以我想知道,我的活动_A 在睡觉吗?如果是,我怎样才能让它活着?

【问题讨论】:

  • Intents 有持久化数据。一旦设置,它将保持这种状态,直到再次明确设置。
  • 如果您想扫描电池,最好使用服务。但如果它只是从活动 A 到 B 的一个值。为变量赋值应该还有另一个问题。
  • 在我的 activity_B 中,我将使用来自 android.support.v4.widget.SwipeRefreshLayout 的 onRefresh() 方法。所以如果我在 onRefresh 中调用我的 getIntent,它会覆盖它吗?
  • 不,Intent 是一次性容器。
  • 所以唯一的方法就是“服务”。我会检查它是如何工作的并尝试去做。谢谢大家的回答。

标签: java android android-intent


【解决方案1】:

我正在做同样的事情并且它可以工作很长时间 - 活动 A 运行一个计时器并启动带有附加功能的活动 B。 当我想用“新的附加功能”刷新活动 B 时,我正在这样做:

                // check if activity B is created and running:
                if (intent == null) {
                    System.out.println("Creating Activity  - Intent is null");
                    intent = new Intent(context, ActivityB.class);
                    intent.putExtras(ImagedownloaderActivityBundle);
                    startActivity(intent);
                }else {
                    System.out.println("Reloading Activity  - Intent exists");
                    finish();
                    intent = new Intent(context, ActivityB.class);
                    intent.removeExtra("playlistsList");
                    intent.putExtras(ImagedownloaderActivityBundle);
                    startActivity(intent);
                }

据我所知,这不是实现后台任务的最佳方式 - 它应该在服务上运行,也许在需要刷新时也可以这样做。

【讨论】:

  • 这看起来很酷,但在我的情况下,activity_A 和 activity_B 都显示了一个视图,所以使用这段代码我的应用程序卡在了 activity_B
  • 解决方案应该是运行一个服务——它可以在满足某些条件时保持运行并更新或重新启动您的活动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2023-01-27
相关资源
最近更新 更多