2012-06-13 33 views
0

我有一個簡單的疑問。在Android中它被說幾乎無處不在,要傳遞一個Stringint或任何ü應該使用Intent和使用putextra()或任何超過傳遞給它下一個activity這裏,我可以創建任何activity爲什麼我應該使用意圖從一個活動發送一個字符串到另一個?

靜態對象和訪問

使用這個意圖背後必然有某種原因,任何人都可以請清楚爲什麼我們需要intent將一個對象從一個activity傳遞到其他可以像我們在java中那樣做的地方。

+0

閱讀這些文章 - [Vogella.de](http://www.vogella.com/articles/AndroidIntent/article.html#intents)和[開發人員指南](http://developer.android.com/reference /android/content/Intent.html#putExtra) – Praveenkumar

+0

看看這個pdf,你會知道爲什麼不使用'static' http://dubroy.com/memory_management_for_android_apps.pdf –

回答

7

因爲我們不考慮靜態上下文中的活動。活動有生命週期,所以我們試圖將我們的數據納入這個生命週期而不是規避它。

剛剛使用靜態變量沒有什麼問題,但可能會出現一些問題。比如說,你顯示一個Activity的多個實例。您需要的兒童Activity所需的String可能與您以前需要的不同,因此,當向後導航到該Activity的先前實例時,該值與您所期望的不同。

通過String通過Intent也使得Activity獨立。一個Activity不應該被設計成與另一個緊密耦合的方式。通過Intent傳遞數據意味着任何Activity只要傳遞正確的數據就可以啓動此Activity

也就是說,在某些情況下,使用靜態可訪問變量是合理的,例如常量值不會更改並且可以被應用程序的多個部分訪問,或者可能需要多個活動可能需要的任何數據。

2

閱讀意圖定義從Intent

的意圖是要被執行的操作的抽象描述。在Android中,Intents被用來激活組件(Activity,Service,BroadcastReceivers)。您可以通過靜態變量傳遞字符串或其他數據,但這不是一個好的做法,因爲在大型應用程序中,如果使用靜態變量,則會產生很多頭痛的問題。

另外,讀取意圖有兩種類型,即隱式意圖和顯式意圖,可以使用靜態變量導致您知道目標組件,但通過隱式目標指定目標組件,靜態變量沒有任何用處。

0

我相信在意圖中使用.putExtras()的主要原因是在兩個活動之間傳遞一個大對象,如字符串數組。

無論如何我建議創建一個全局類,其中包含您想要在多個活動中使用的所有變量,訪問多個變量都比一個地方更容易,而不是嘗試並傳遞一個活動之間的一堆變量。

0

簡單地說,靜態變量應該在加載時預加載......所以,它會增加內存使用和處理,如果你的應用程序沒有執行到靜態變量就是使用..這是毫無價值的預加載變量。

2

一般來說,你可以使用將數據從一個Activity傳遞到另一個。這並不意味着這是最好的主意。以下是使用Intent臨時演員的幾個原因。

  1. 這是一個慣例。這是大多數Android開發人員所做的事情。如果除您以外的任何人要閱讀或維護您的代碼,那麼使用常見的解決方案解決您的編程問題是很好的。

  2. 一般來說,在Java或其他OO編程語言中,最好避免使用靜態變量(除非它們是常量)。 Here's one article on why this ishere's another

  3. 想想一個正常的非Android應用程序。忘記ActivitiesIntents。如果你必須創建另一個控制器對象,它需要一個控制器對象,它可以使用這樣的代碼:

FirstController.java:

public void doSomething() { 
    SecondController newController = new SecondController(); 
    newController.start(); 
} 

如果你想通過從一個字符串變量第一控制器,第二,你不會使用靜態變量...你只是這樣做:

newController.start("WithSomeData"); 

現在,再想想Android系統。 Activity對象沒有以相同的方式實例化。其中一個Activity不會簡單地將另一個new作爲參考,並調用其方法。這就是爲什麼需要這個相當複雜的過程。因爲如果Activity對象是通過Intent對象間接創建的,那麼「調用者」還沒有對「被調用」對象的引用,因此不能使用正常的方法和參數傳遞。所以,如果我們接受這個限制,那麼你需要另一種方式來傳遞信息。由於Intent對象用於創建Activity或返回到現有的Activity,因此賦予Intents處理額外數據(如傳遞的參數)的能力是有意義的。

同樣,這個解決方案是由於一般人不喜歡使用靜態變量以及它們的問題而創建的。

但是,如果你只是有兩個Activity類和會有永遠只能是一個併發的情況下,每個Activity,那麼你很可能逃脫靜態變量。我仍然不會推薦它,因爲我列出的原因。

相關問題