天天看點

使用Activity傳遞複雜的資料

  一、實作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)  這個方法即可。