遇到過幾次對象傳遞的問題,都想通過Intent用bundle傳遞,但發現bundle沒有直接傳對象的方法。
第一次要傳遞的是bitmap對象,用靜態對象的方法解決了;
第二次要傳遞的是自己定義的Bean對象,用蠢辦法將Bean對象的值打包到String[]數組里傳過去了,
現在想想真的是蠢辦法,若果有一個不是String類型的值就行不通了。
上網查了一下,發現上面第二種情況,自定義的對象可以通過bundle傳遞,前提條件就是自定義的類實現Parcelable,Serializable兩個接口之一。
高手已經寫得很詳細了,還有代碼:
http://www.devdiv.com/forum.php?mod=viewthread&tid=45409&highlight=%B4%AB%B5%DD%B6%D4%CF%F3
大家可以參考一下
很多人知道在activity之間傳遞對象時有兩個選擇一個是Parcelable,另外一個是Serializable。但究竟我們該何時使用其中的一個呢?
很多人不得而知,所以混用和濫用的情況就出現了。在這里我想給大家說清楚,以減少在程序中的不必要的風險。
1.在使用內存的時候,Parcelable 類比Serializable性能高,所以推薦使用Parcelable類。
2.Serializable在序列化的時候會產生大量的臨時變量,從而引起頻繁的GC。
3.Parcelable不能使用在要將數據存儲在磁盤上的情況,因為Parcelable不能很好的保證數據的持續性在外界有變化的情況下。
盡管Serializable效率低點, 也不提倡用,但在這種情況下,還是建議你用Serializable 。
但是知道這種方法還遠遠不足夠,因為很多時候要傳遞的對象未必是自己定義的,例如上面第一種情況,這時候怎么辦呢?
其實據說還有很多方法,也不一定要拘泥於“傳遞”,能共享到該對象就能達到目的了:
不過在多個Activity中經常使用同一變量時,使用Bundle則比較麻煩,每次調用Activity都需要設置一次。
如想在整個應用中使用,在java中一般是使用靜態變量,而在android中有個更優雅的方式是使用Application context。
新建一個類,繼承自Application
classMyAppextendsApplication{ privateString myState; publicString getState(){ return myState; } publicvoid setState(String s){ myState = s; } } classMyAppextends Application{ privateString myState; publicString getState(){ return myState; } publicvoid setState(String s){ myState = s; } }
在AndroidManifest.xml的application加個name屬性就可以了,如下面所示:
android:name=".MyApp" android:icon="@drawable/icon"
android:label="@string/app_name">
1.靜態對象
2.使用參數棧
3.弱引用+觀察者模式實現
4.各種合適的設計模式
據說方法多種多樣,能達到目的就行。我也還沒遇到過其它情況,以后遇到好的方法,再來記錄。