-1

我有一个棘手的情况。我会尽量以最好的方式充分解释它。

我的应用程序很少有活动,比如 A、B、C。A 是主要活动,B 和 C 从 A 调用。所以基本上当 B 或 C 运行时,A 将停止(onStop())。

我在我的应用程序中使用了一个 android 库(由我创建)。我的图书馆保存了活动的上下文。例如,当我们使用活动 A 打开应用程序时,我的库将保存 A 的上下文,并将使用该上下文创建一个处理程序并将它们保存在 Map( Map<Context, Handler>) 中。现在,如果我们导航到活动 B,我的库将获取 B 的上下文,然后在地图中为此创建一个新条目。

在某个时间点,我将使用 Map 中的处理程序来发布一些可运行文件。显然,A 和 B 都将收到,因为它们都在运行(一个在后台和前台)。

  1. 但是我怎样才能检查并只发送给在前台运行的那个?是否可以从上下文值检查活动当前是正在运行还是已停止?

  2. this.getMainLooper当从 A 和 B 调用时返回相同的东西吗?

更新:对不起,我错过了这一点。该应用程序是关于如何使用我的库的演示应用程序。所以我将来会发布我的库,开发人员会使用它。因此,我不希望开发人员这样做,如果我能在我的库本身中做到这一点,那将是最好的。

4

1 回答 1

2
  1. 但是我怎样才能检查并只发送给在前台运行的那个?是否可以从上下文值检查活动当前是正在运行还是已停止?
  • 最简单和推荐的方法是将对该Application对象的引用传递给您的库,您可以使用它注册到活动生命周期回调Application.registerActivityLifecycleCallbacks,并监视活动的状态并确定活动何时处于前台(使用onActivityResumed()回调)。
  • 另一个不太可取的选择是,每个活动都会通知您的库代码有关它的事件,但它当然更乏味且容易出错。
  • 第三种“不这样做”的方法是使用ActivityManagerthat has getRunningTasks(),并且您可以从他们那里获得顶级活动,但它再次被记录为“仅用于调试目的”,并且比上述所有方法更容易出错。
  1. 当从 A 和 B 调用时 this.getMainLooper 返回相同的东西吗?

是的,A 和 B 坐在同一个进程上,Main Looper 是主 UI 线程的 looper,每个Process.

于 2017-03-30T05:28:26.677 回答