1. 程式人生 > >JavaBinder: !!! FAILED BINDER TRANSACTION !!! intent傳遞大資料異常解決

JavaBinder: !!! FAILED BINDER TRANSACTION !!! intent傳遞大資料異常解決

    在使用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時就會被回收