Tính đến API26, không có cách nào tiếp xúc dễ dàng làm được điều này, bạn phải tự xác minh rằng các giá trị tương thích:
private boolean bundleCanBePersisted(final Bundle extras) {
if (extras == null) {
return true;
}
Set<String> keys = extras.keySet();
Iterator<String> it = keys.iterator();
boolean allExtrasPersistable = true;
while (it.hasNext()) {
String key = it.next();
boolean isPersistable = isPersistable(extras.get(key));
if (!isPersistable) {
LOGGER.warning("Non persistable value in bundle. " + bundleItemToString(key, extras));
}
allExtrasPersistable &= isPersistable;
}
return allExtrasPersistable;
}
/**
* These are all the values that can be put into a PersistableBundle.
*/
private boolean isPersistable(final Object o) {
return o == null
|| o instanceof PersistableBundle
|| o instanceof String
|| o instanceof String[]
|| o instanceof Boolean
|| o instanceof Boolean[]
|| o instanceof Double
|| o instanceof Double[]
|| o instanceof Integer
|| o instanceof Integer[]
|| o instanceof Long
|| o instanceof Long[];
}
private String bundleItemToString(final String key, final Bundle bundle) {
Object value = bundle.get(key);
Class<?> valueClazz = null;
if (value != null) {
valueClazz = value.getClass();
}
return String.format("[%s = %s (%s)]", key, value, valueClazz);
}
Nguồn
2017-07-18 22:14:33
Tôi tưởng tượng bạn sẽ nhận được một không gian hạn chế cho những gì bạn đang tiết kiệm . Dù sao, thay vì ném bom, hãy thực hiện một cuộc tấn công chính xác, tức là lưu những gì bạn cần phục hồi sau khi khởi động lại và không có gì khác. /// 'JobInfo.Builder.setExtras' chỉ chấp nhận' PersistableBundle'. Vì vậy, nếu bạn tạo trực tiếp, bạn thậm chí không chạm vào 'Bundle' thông thường và không có gì để chuyển đổi. –
Đây không phải là câu trả lời cho câu hỏi. –
Đó là lý do tại sao nó là một bình luận. Tôi chỉ đảm bảo rằng bạn không giải quyết được vấn đề nhân tạo (một vấn đề không nên xảy ra ngay từ đầu). –