簡體   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