我想转移一个 Object throw intent ,但该对象没有实现 Serializable 或 parcelable。所以我意识到它是这样的:
private static Map<String, WeakReference<Object>> map = new HashMap<String, WeakReference<Object>>();
public static void saveObjectInIntent(Intent intent, String key,
Object value) {
String realKey = randomString();
map.put(realKey, new WeakReference<Object>(value));
if (intent != null) {
intent.putExtra(key, realKey);
}
}
public static Object getObjectFromIntent(Intent intent, String key) {
String realKey = intent.getStringExtra(key);
WeakReference<Object> weak = map.get(realKey);
if (weak != null) {
return weak.get();
}
return null;
}
但是我发现即使活动完成了,弱引用中的对象也不会被gc回收。
所以我写了一个这样的测试:
Object obj = new Object();
ObjectTrsnferHelper.saveObjectInIntent(null, "a", obj);
obj = null;
obj 也没有被回收。
为什么 ?
抱歉,没有问题。但我之前写错了我的测试代码。
它应该是 :
Set<String> keys = map.keySet();
for (String key : keys) {
WeakReference<Object> weak = map.get(key);
if (weak.get() == null) {
App.log(key + "被清除了");
}
}
我之前写过“if(weak==null)”。