經常有人會問Android 傳值問題,抽空寫篇文章分享下
在Android中,我們會經常進行頁面跳轉和傳遞值,比如Activity to Activity,Activity to Fragment(使用Bundle setArgument()),等各種辦法,
如果傳遞的是普通的數據類型(整形,浮點型,字符,String等) 可以直接putExtra,然後另外一個界面直接getIntent.getXXExtra.
如果是對象,那麼我們需要對對象進行序列化,有兩種序列化的方式:
實現
第一種:
Serializable 接口 可以不寫任何實現方法 因爲這個接口沒有定義方法 這個會影響IO 並且讀寫速度略慢與第二種(JAVA 自帶)
第二種:
Parceable 接口 (推薦 這是安卓自帶的) 這個接口會把對象進行序列化,寫入二進制流,然後對每個字段進行序列化。
但需要複寫幾個方法
然後必須寫一個構造方法
相對於第一種 會比較麻煩點 但是效率和性能會提升N倍 推薦第二種方式
取出對象
注意:如果是Bean類裏面包含List 那麼該內部類也得實現接口
第三種:AIDL ...
第四種:廣播 。。。
等等。。。
但是如果Intent傳遞的數據過大 大於1M 系統會拋出一個異常:TransactionTooLargeException
常用的解決方案:
1.如果對象裏面的屬性有的不需要,或者只需要一個id,那麼我們可以直接傳遞id,或者其他的字段
2.通過Applition
3.通過static ,但會容易造成內存泄露
4.持久化