2010-07-29 46 views
6

在不同Android活動之間交換數據或對象的正確方式是什麼?如何在不同的Android活動之間交換數據(對象)?

歡迎屏幕< - >主屏幕< - >啓動程序< - >處理數據< - >設置

是正常/建議有Android應用超過一個活動?在我看來,這是莫名其妙怪有內部應用程序的數據交換的這種模式

+0

可能重複的[如何在Android中的活動之間傳遞數據?](http://stackoverflow.com/questions/2091465/how-do- i-pass-data-between-activities-in-android) – 2011-10-30 17:05:49

回答

6

還有就是Android的開發者頁面上的概述:

http://developer.android.com/guide/appendix/faq/framework.html#3

要總結一下,要看是什麼類型的數據你會通過。但總的來說,如果可能的話,我會選擇Intents,因爲它們速度很快,並且爲此而構建。

Here是一個例子,解釋瞭如何使用Intents在活動之間傳遞數據。

+4

只能使用「意圖」附加功能與您正在啓動的東西綁定。將它們視爲等同於Web站點上頁面間鏈接所用URL的參數。特別是,不要將模型數據存儲在「意圖」附加項中,因爲當您將該數據從活動傳遞到活動時,會得到N份數據。此外,'intents'在內存中呆了很長時間,有時甚至在活動被破壞之後,所以內存成本變得更高。 – CommonsWare 2010-07-29 23:24:47

4

答案是:It Depends。

根據您的應用程序的架構,你可能想:

  • 存儲您的自定義的ContentProvider數據,並通過周圍的URI引用它---如果你的應用程序是基於一個數據庫,這是要走的路,因爲它允許其他應用程序直接引用您的數據項;

  • 你的活動是通過發送對方的內容進行交流的,數據打包在自定義的Intent數據區域---如果你只使用非常小的數據項目,比如名稱或URI,這是一個簡單的方法管理的東西,但它打破了較大的項目;

  • 將所有活動都放在單個進程中運行,並將數據存儲在共享的Java對象中---通常不推薦使用,但適用於專門的應用程序,如遊戲(但要記住與應用程序生命週期有關的問題! )。

我的應用程序傾向於採用前兩種的組合:主要是生活在ContentProvider的數據,但我也使用意圖發送的ContentProvider和活動之間進行帶外信息時,這些數據獲得了不容易適應ContentProvider API。

9

這是正常的/建議在Android應用程序中有更多的 嗎?

Normal?是。推薦的?這取決於應用程序。

在我看來,這在某種程度上奇怪 有這個模型中的應用數據交換 與Web應用程序

你會怎麼做?那麼,你將模型保存在一箇中心點(服務器)中,並在主要UI(頁面)單元之間的鏈接中傳遞一小部分上下文數據(URL參數)。

你對桌面應用有什麼作用?那麼,你將模型放在一箇中心點(數據庫)中,並且在UI(窗口)的主要單元之間的鏈接中傳遞少量的上下文數據(例如,構造函數參數)。

你對Android應用做什麼?那麼,你將模型保存在一箇中心點(數據庫,ContentProvider等)中,並且在UI(活動)的主要單元之間的鏈接中傳遞一小部分上下文數據(Intent臨時演員)。

+0

當你這樣說的時候,它實際上是合乎邏輯的。 – Ante 2010-07-29 23:44:55

0

做什麼谷歌命令你在這裏做的:http://developer.android.com/resources/faq/framework.html#3

選擇: 基本數據類型 非持久性對象 Singleton類 - 我最喜歡的:d 公共靜態字段/方法 在WeakReferences到一個HashMap對象 持久對象(應用程序首選項,文件,內容提供者,SQLite數據庫)

相關問題