JavaBinder: !!! FAILED BINDER TRANSACTION !!! intent傳遞大資料異常解決
阿新 • • 發佈:2019-01-09
在使用intent傳遞集合資料的時候,報了JavaBinder: !!! FAILED BINDER TRANSACTION !!! 錯誤,翻譯成中文就是“繫結器事務失敗”,實際的原因就是使用intent的時候攜帶的資料太大導致傳遞失敗。
Intent攜帶資料的大小受限Binder快取的大小,Binder快取的大小大約為1M,但有可能其他地方也存在快取,所以實際大小肯定是小於1Mde的。所以傳遞小資料時可以用intent攜帶,但是大資料時就不考慮這種方法了,如果實在是必須使用傳遞那麼可以使用一個操作類來暫存。
public class DataHelper { private static final DataHelper helper= new DataHelper(); public static DataHelper getInstance() {return helper;} Map<String, WeakReference<Object>> data = new HashMap<String, WeakReference<Object>>(); public void saveData(String id, Object object) { data.put(id, new WeakReference<Object>(object)); } public Object getData(String id) { WeakReference<Object> objectWeakReference = data.get(id); return objectWeakReference.get(); } }
因為是儲存大資料那就要考慮OOM,所以我們用一個Map的WeakReference弱引用,在GC時就會被回收。