如何从上下文值中了解哪些活动当前正在运行前景?

时间:2017-03-30 03:51:55

标签: android android-handler android-looper

我有一个棘手的情况。我将尽力以最好的方式对其进行全面解释。

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

我在我的应用程序中使用了一个安卓库(由我创建)。我的库保存了活动的上下文。例如,当我们使用活动A打开应用程序时,我的库将保存A的上下文,并将使用该上下文创建处理程序并将其保存在Map(Map<Context, Handler&gt;)中。现在,如果我们导航到活动B,我的库将获得B的上下文,然后在Map中为此创建一个新条目。

在某个时间点,我将使用Map中的处理程序发布一些runnables。显然,A和B都会在两个都在运行时接收(一个在后台和前台)。

  1. 但是如何检查并仅发送到前台运行的那个?是否可以从上下文值中检查活动当前是否正在运行或停止?

  2. 从A和B调用时this.getMainLooper会返回相同的内容吗?

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

1 个答案:

答案 0 :(得分:2)

  
      
  1. 但是我怎样才能检查并发送给前台运行的那个?是否可以从上下文值中检查是否可以   活动目前正在运行或停止?
  2.   
  • 最简单和推荐的方法是将Application对象的引用传递给您的库,使用它可以使用Application.registerActivityLifecycleCallbacks注册到Activity Lifecycle回调,并监视活动的状态和确定活动何时是前景(使用onActivityResumed()回调)。
  • 另一个不太优选的选项是,每个活动都会通知您的库代码有关它的事件,但它当然更繁琐且容易出错。
  • 第三个'不要这样做'的方式是使用ActivityManager getRunningTasks(),并且从他们那里你可以得到顶级活动,但它再次被记录为“仅用于调试目的”而且更多所有上述情况都容易出错。
  
      
  1. 从A和B调用时,this.getMainLooper会返回相同的内容吗?
  2.   

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