如何从活动中找出另一个活动已被终止

时间:2018-05-16 13:11:11

标签: java android

我有2项活动

活动A有一个注册的接收器,用于更新静态通用列表。

活动B访问活动A中的静态通用列表。

问题是:

如果活动A结束(被系统杀死),则注册的接收器停止,这使得静态通用列表中的数据不可靠,因为它取决于要更新的​​注册接收器。

静态通用列表没有被注册的接收器终止(null / zeroed)的最大问题,尽管它们都是由同一个活动创建的。

因此,当创建活动B时,我无法知道我的静态通用列表变得不可靠,无法使用新数据重新加载它。

也没有办法 - 监听器 - 监听已注册的接收器终止,我已经终止了通用静态列表,并在活动B创建中检查它,如果它为空,我将重新加载一个新数据。 / p>

正如您所知,当系统终止活动时,无法保证会调用onDestroy,否则我将终止通用静态列表。

我甚至在活动A中添加了一个静态布尔值var(mAlive),它具有默认值(false)并在onCreate中变为(true),希望当活动A被销毁时,(mAlive)将变为false(默认值)声明中的值,我可以在活动B中检查,知道已注册的接收器已终止且数据不可靠并重新加载,但事实证明,即使销毁活动A,也不会重置静态布尔值var( mAlive)为其默认值(false)。

所以,请提出任何建议,我在过去两周内试图找到一个解决方案。

谢谢

3 个答案:

答案 0 :(得分:1)

您似乎非常误解Activity Lifecycle

一次只能运行一个Activity。当新的一个启动时,当前的一个暂停,您无法直接从另一个Activity访问一个Activity中包含的任何内容。静态变量可以包含简单数据,但不建议将其作为避免处理活动生命周期的方法。

要在活动之间传递数据,请使用Intents和Extras。 How do I pass data between Activities in Android application?

如果您希望两个活动共享相同的数据,您可以使用包含可从两个活动访问的数据的Service

答案 1 :(得分:0)

您可以从所需活动的onDestroy()方法中播放广播(BroadcastReceiver Example)。然后在您所需的活动中接收广播。

答案 2 :(得分:0)

您可以将数据放入单独的对象中,这样就不会影响活动A的生命周期。您可以在Finder部分看到示例here

我认为您可以通过活动A和B扩展父活动。在您的父活动中,您可以将接收者注册到其// Find minimum x value so that x + d = y template<typename T, bool supportDenormals = false> T subtractMost (const T y, const T d) { T x = y - d; while (true) { const T nextX = x == 0 && !supportDenormals ? -std::numeric_limits<T>::min() : nextafter (x, -std::numeric_limits<T>::infinity()); if (nextX + d != y) return x; T step = x - nextX; while (true) { const T nextStep = step + step; if (x - nextStep + d != y) break; step = nextStep; } x -= step; } } 方法中,然后将其注销到其onResume方法中。通过这种方式,您应该始终将您的接收器注册到当前活动。

然后,如果您已阅读上一个链接,如果您让Finder负责保留您的新数据并将其引用到您的父活动中(因此您可以参考活动A和活动B),那么您应该足够确定由当前活动活动引用的变量不能被系统销毁。

我确定不明白你的需要,让我知道