背景:
上一級的列表頁, 需要選中幾條或者多條或者全部列表, 然后將數據傳遞到下一級頁面.
intent.putExtra("selectList", selectDataArr);
這是創建的Bean文件, 全選傳值時要傳遞的就是dataList里面的內容, 那么問題來了 :
在聲明dataList的ArrayList的泛型時, 這個小的BackListItemBean如果是直接嵌套在大的class BacklogListEntity內部, 當時測試數據有180條, 則直接崩潰, 報一個intent傳遞內容太大的錯誤. 如果把這個小的 BackListItemBean 單獨拿出來自己新建一個java文件, 則180條測試數據可以傳遞, 可以傳遞900條左右, 如果數據在數, 也會超過intent的限制.
問題1 : 小的BackListItemBean是嵌套或者不嵌套, 為什么會占內存不同?
問題2 : intent傳遞較大量級的數據, 用什么方式?
回答1:(個人見解,如錯請指正,謝謝)
如果是嵌套的小bean, 要想取到小的bean就要使用BackListItemBean.BacklogListEntity.BackListItemBean 這樣等于嵌套兩層, 這樣即使只是用小的bean, 也會多存儲上兩層的地址信息, 單獨的文件就不需要這兩層的地址信息,所以可以傳遞的條數會多一些.
回答2:
方法1,使用靜態類,傳遞時把數據存在靜態類里面,但是使用后要注意及時置為null, 不過里面會牽扯一些java內存機制的問題.
方法2, 寫數據庫, 但是存取耗時, 不推薦
方法3, 只記住選中的item的數據的id, 拼成字符串傳到下一級頁面,然后再鞋以及頁面再請求一次獲取數據的接口,然后根據傳進來的id比對出師選中的那些數據, 當然也有缺陷,如果選的數據多,循環次數也很多
畢竟剛接觸安卓不久, 很多底層原理都還不大懂, 解決問題的方法也可能不夠好, 如果有更好的方式, 希望不累賜教.