2011-03-10 109 views
1

我的程序有幾個活動。當一個活動處於前臺時,用戶可以在那裏做些事情,並且應該通知其他非活動(即,已停止和已暫停)活動,以便當他們onResume()時,他們可以相應地採取行動。如何通知不活動的活動?

我的問題是:前臺活動如何枚舉,以及存在哪些不活動的活動?它是如何告知他們的?

我看過意圖和廣播,他們似乎不是正確的答案。我試圖將事件發佈到非活動Activity的Handler隊列,但由於我不知道如何枚舉它們,所以我也無法訪問它們的處理程序。

幫助!謝謝!我不能只設置一個全局標誌,因爲當第一個不活動的活動變成活動時,它看到它,它清除它,然後其餘的IA不知道,我不能設置一個計數器因爲我不知道是否有多少IA在那裏,在我看來,唯一的辦法就是我知道誰在那裏,然後逐個通知他們。)

+0

請使用一些標籤爲您的問題! – WarrenFaith 2011-03-10 00:23:10

回答

2

我的問題是:前景活動如何枚舉如果和什麼非活動的活動存在?它是如何告知他們的?

你沒有,你沒有。

想象一個具有多個網頁的Web應用程序。 「前臺網頁」不會「枚舉是否存在和不活動的網頁」,更不用說「通知他們」。從目前可見的網頁的角度來看,這是唯一的事情。瀏覽器在其歷史上可能有其他網頁的事實並不重要。

Android活動也一樣。一個活動不應該知道也不關心這個應用程序在RAM中是否有0,1,2或1337個其他活動(儘管可能性會低於1337)。相反,應該有一個統一的中央數據模型(例如數據庫),並且這些活動各自針對中央數據模型。

好吧,那麼這是否意味着Android不支持或鼓勵一項活動主動通知另一個不活動的活動?

正確。

因此,活動必須輪詢以獲取信息?

沒有更多或更少的網頁必須輪詢以獲取信息。這取決於你對「投票」的定義。

+0

太棒了!我想我得到了我想要的,但意想不到的。 (網頁和活動之間的區別在於網頁通常是獨立的,但是活動是協作的,在更緊密或更鬆散的意義上說,所以有時他們必須相互交談,但這在這裏並不重要)。是一個簡單的例子,我將爲每個活動實施一個「語音郵箱」,使用Android的Preferenecs或全局靜態或其他。當一個人醒來時,他只是去檢查昨晚的任何語音郵件。這應該夠了。謝謝! – wwyt 2011-03-10 01:42:28

+0

@wwyt:「網頁通常是獨立的,但活動是合作的」 - 恕我直言,活動不會「協作」任何更多或更少的單獨網頁的Web應用程序。 – CommonsWare 2011-03-10 02:04:57

+0

使用1337時的+1:D – WarrenFaith 2011-03-10 11:49:06

1

首先我懷疑你是否以正確的方式思考。一項活動應該詢問有關啓動的信息,不應該被其他活動「告知」(我不會談論startActivityForResult())。

當您在不同活動之間共享大量數據時,應認真考慮將它們存儲在配置類中,存儲在SharedPreferences或數據庫中。你主要的邏輯問題是你說的:

我不能只設置一個全局標誌。因爲當第一個非活動活動變爲活動時,它會看到它,它將清除它。

爲什麼活動應該清除標誌?當你告訴它清除它時,它只會清除一面旗幟。所以,你可以停止清除你的國旗的活動。

+0

_「一項活動應該詢問關於啓動的信息,而不應該被其他活動」通知「」_好吧,那麼這是否意味着Android不主動支持或鼓勵一項活動通知另一項不活動的活動?因此,這些活動必須輪詢以獲取信息?我想是這樣。 Android是圍繞着這些新概念而設計的,即停止和暫停狀態,因此,要求Android提供一種與睡眠活動進行通信的方式似乎沒有任何意義,這些活動首先由Android進行睡眠。 。這種理解是否正確? – wwyt 2011-03-10 00:41:42

1

您可以考慮使用內容提供者並調用ContentResolver.notifyChange()讓感興趣的活動知道某些內容已更改。

+0

謝謝,但因爲這是一個非常簡單的通知,內容提供對我來說可能有點矯枉過正。首先我應該更清楚一點。但非常感謝。 – wwyt 2011-03-10 01:47:29