在Activity之間傳遞對象的問題


遇到過幾次對象傳遞的問題,都想通過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.各種合適的設計模式

 

據說方法多種多樣,能達到目的就行。我也還沒遇到過其它情況,以后遇到好的方法,再來記錄。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM