一、實作Parcelable接口
對于Android來說傳遞複雜類型,主要是将自己的類轉換為基礎的位元組數組,Activity之間傳遞資料是通過Intent實作的,對于二進制資料,傳遞的參數為putExtra(String name, Parcelable value) ,比如Bitmap類就實作了Parcelable接口,如果需要在Activity中傳遞圖檔,可以直接用Bitmap類型,當然如果本身是Drawable你可以先轉化為Bitmap,可以參考 Bitmap和Drawable互相轉換方法 一文。
相關的Intent方法還有
putExtra(String name, Parcelable[] value) // 傳遞一個Parcelable數組
putExtra(String name, Bundle value) //傳遞一個Bundle對象
putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value) //傳遞一個實作Parcelable接口的對象數組
putStringArrayListExtra(String name, ArrayList<String> value) //傳遞一個字元串數組
putIntegerArrayListExtra(String name, ArrayList<Integer> value) //傳遞一個整形數組。
這裡Android開發網提示大家,Integer這些裝箱類型,Intent還實作了 putExtra(String name, int[] value) 這樣的基礎類型數組,同時Parcelable效率比标準的Java序列化更高,同時還被用作在AIDL中交換資料,是以掌握Parcelable這樣的顯示序列化技術,可以大幅提高資料交換 性能。
二、使用全局單例模式
由于Android中Activity傳遞主要靠Intent這個類,Intent類内部傳遞資料的效率仍然需要拷貝,如果資料量很大,還可以考慮使用Singleton Pattern單例模式定義一個全局的靜态類,這樣傳遞的效率最高,大家可以看下Java 設計模式,了解其中的妙用。
三、實作Serializable接口
如果你學習過傳統的Java,則可以通過串行化技術,實作Serializable接口,其實這個原理和Parcelable差不多,均将自己的類轉換為基本的類型比如說位元組數組。在Android中不是很實用,這裡不再贅述,在Intent中使用Intent putExtra(String name, Serializable value) 這個方法即可。