網站首頁 編程語言 正文
Parcelable
優點:
- google專門為安卓寫的序列化接口
- 性能好,內存開銷小,效率高,寫起來復雜
缺點:
- 各個機型可能有差異,Parcelable使用會產生差異
- 通訊組件之間(AIDL ,INTENT)的數據傳遞,可以使用Parcelable
- 寫入存儲設備推薦使用Serializable
public class MyParcelable implements Parcelable {
* private int mData;//參數
* public int describeContents() {//類描述,一般不管他
* return 0;
* }
* public void writeToParcel(Parcel out, int flags) {//序列化 :out寫入參數,要注明參數類型 flag一般默認是0,1代表對象需要返回,不回收
* out.writeInt(mData);
* }
* public static final Parcelable.Creator<MyParcelable> CREATOR//反序列化操作
* = new Parcelable.Creator<MyParcelable>() {
* public MyParcelable createFromParcel(Parcel in) {
* return new MyParcelable(in);
* }
* public MyParcelable[] newArray(int size) {
* return new MyParcelable[size];
* }
* };
* private MyParcelable(Parcel in) {
* mData = in.readInt();
* }
* }
google官方也是很貼心呀,直接把怎么用放在源碼的注釋里了
Serializable
優點:
- java自帶的序列化接口
- Serializable是一個空接口,使用簡單,是一個標識,會給類一個序列化UID
缺點:
- 因為使用的是反射,使用性能差,內存開銷大
package java.io;
// Android-added: Notes about serialVersionUID, using serialization judiciously, JSON.
public interface Serializable {
}
Serializable 是一個空接口,用來標識當前類可以被 ObjectOutputStream序列化,以及被ObjectInputStream反序列化
Parcelable與Serializable的性能比較
- 在內存的使用中,Parcelable在性能方面要強于Serializable
- Serializable在序列化操作的時候會產生大量的臨時變量,(原因是使用了反射機制)從而導致GC的頻繁調用,因此在性能上會稍微遜色
- Parcelable是以Ibinder作為信息載體的,在內存上的開銷比較小,因此在內存之間進行數據傳遞的時候,Android推薦使用Parcelable
- 在讀寫數據的時候,Parcelable是在內存中直接進行讀寫,而Serializable是通過使用IO流的形式將數據讀寫入在硬盤上
- 雖然Parcelable的性能要強于Serializable,但是仍然有特殊的情況需要使用Serializable,而不去使用Parcelable,因為Parcelable無法將數據進行持久化,因此在將數據保存在磁盤的時候,仍然需要使用后者,因為前者無法很好的將數據進行持久化 (原因是在不同的Android版本當中,Parcelable可能會不同,因此數據的持久化方面仍然是使用Serializable)
總結:
- Java應用程序中有Serializable來實現序列化操作
- Android中有Parcelable來實現序列化操作 ??
- 在Android中除了對數據持久化的時候需要使用到Serializable來實現序列化操作,其他的時候我們仍然需要使用Parcelable來實現序列化操作
- 在Android中效率并不是最重要的,而是內存, 通過比較Parcelable在效率和內存上強于Serializable
個人小建議:
盡管Parcelable實現起來比較復雜,但是如果我們想要成為一名優秀的Android軟件工程師,那么我們就需要勤快一些去實現Parcelable,而不是偷懶與實現Serializable,當然實現Serializable也可以
原文鏈接:https://blog.csdn.net/Ai1114/article/details/125246559
相關推薦
- 2022-07-21 SpringBoot整合SpringCache詳解
- 2022-09-13 Django?中使用日志的方法_python
- 2022-02-28 npm install安裝報錯 gyp info it worked if it ends with
- 2022-06-02 Python導包模塊報錯的問題解決_python
- 2022-07-08 C#跨PC遠程調用程序并顯示UI界面_C#教程
- 2022-12-08 重溫Python基礎之列表操作_python
- 2022-08-28 PostgreSQL常用字符串分割函數整理匯總_PostgreSQL
- 2022-09-28 使用C語言實現三子棋小游戲_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支