在 Android 13 (SDK 33) 中,Bundle.getSerializable(String)方法已被弃用。取而代之的是使用Bundle.getBinder(String)方法。以下是一个使用getBinder()方法的示例:
在存储到Bundle时:
MyClass myObject = new MyClass();
Bundle bundle = new Bundle();
bundle.putBinder("myKey", new ObjectWrapperForBinder(myObject));
在从Bundle中读取时:
Bundle bundle = getIntent().getExtras();
MyClass myObject = (MyClass) ((ObjectWrapperForBinder) bundle.getBinder("myKey")).getData();
其中,ObjectWrapperForBinder是一个辅助类,用于将一个对象转换为IBinder。以下是ObjectWrapperForBinder类的详细示例:
public class ObjectWrapperForBinder implements Parcelable {
private final IBinder binder;
public ObjectWrapperForBinder(Object obj) {
binder = new ObjectWrapperBinder(obj);
}
private ObjectWrapperForBinder(Parcel in) {
binder = in.readStrongBinder();
}
public Object getData() {
return ((ObjectWrapperBinder) binder).data;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStrongBinder(binder);
}
public static final Creator CREATOR = new Creator() {
@Override
public ObjectWrapperForBinder createFromParcel(Parcel in) {
return new ObjectWrapperForBinder(in);
}
@Override
public ObjectWrapperForBinder[] newArray(int size) {
return new ObjectWrapperForBinder[size];
}
};
@Override
public int describeContents() {
return 0;
}
private static class ObjectWrapperBinder extends Binder {
private final Object data;
private ObjectWrapperBinder(Object data) {
this.data = data;
}
}
}
上一篇:Android13(API33)引入了广告ID的更改。
下一篇:Android13(SDK33):PackageManager.getPackageInfo(String,int)已弃用,有什么替代方案?