首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android ObjectOutputStream 序列化 ImageView 失敗:View 非可序列化與正確持久化策略

     編輯:程式設計綜合問答

原因

`ImageView` 繼承 `View`,**未實現 `Serializable`**,且持有 `Context`、`Canvas` 等運行時上下文引用,序列化會拋出 `NotSerializableException` 或反序列化後黑屏 (Native 資源丟失)。

正確策略:僅序列化數據模型

// 數據類
class ImageItem implements Serializable {
    String url;          // 圖片 URL/路徑
    Rect bounds;         // 顯示區域
    Matrix matrix;       // 縮放/平移矩陣 (可序列化為 9 float 陣列)
    // getter/setter
}

// 保存
List items = ...;
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file))) {
    oos.writeObject(items);
}

// 讀取並重建 View
List loaded = (List) ois.readObject();
for (ImageItem item : loaded) {
    ImageView iv = new ImageView(context);
    iv.setImageBitmap(loadBitmap(item.url)); // 異步加載
    iv.setScaleType(ScaleType.MATRIX);
    iv.setImageMatrix(item.matrix);
    container.addView(iv, new LayoutParams(item.bounds.width(), item.bounds.height()));
}

替代:Room/SharedPreferences 存儲 JSON (Gson/Moshi)

更輕量、跨版本穩定、易調試。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved