繁体   English   中英

如何从上下文值中知道当前正在运行哪个活动?

[英]How to know from context values which activity is currently running foreground?

我的处境很棘手。 我将尽力以最佳方式充分解释它。

我的应用程序几乎没有活动,例如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. 从A和B调用this.getMainLooper是否会返回相同的东西?

更新:对不起,我错过了这一点。 该应用程序是有关如何使用我的库的演示应用程序。 因此,我将来会发布我的库,而开发人员将使用它。 因此,我不希望开发人员执行此操作,如果我可以在自己的库中执行此操作,那将是最好的。

  1. 但是,如何检查并仅发送给在前台运行的服务器呢? 是否可以从上下文值中检查活动当前正在运行还是已停止?
  • 最简单和推荐的方法是将对Application对象的引用交给您的库,使用它,您可以使用Application.registerActivityLifecycleCallbacks注册到Activity Lifecycle回调,并监视Activity的状态并确定何时活动为前台(使用onActivityResumed()回调)。
  • 另一个不太可取的选择是,每个活动都会将其事件通知您的库代码,但这当然更加乏味且容易出错。
  • 第三种“不做”的方法是使用具有getRunningTasks() ActivityManager ,从它们中您可以获取顶级活动,但是再次记录为“仅出于调试目的”,并且比以上所有内容都更容易出错。
  1. 从A和B调用this.getMainLooper是否会返回相同的东西?

是的,A和B坐在相同的过程,主要是活套在主UI线程,这是每单数的弯针Process

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM