[问题] ArrayList被系统自动回收?

楼主: sweet00914 (别理我)   2015-02-28 17:53:31
假设宣告
ArrayList<String> a = new ArrayList <String>;
ArrayList<String> b = new ArrayList <String>;
ArrayList<String> c = new ArrayList <String>;
ArrayList<String> d = new ArrayList <String>;
当 a, b, c被赋予值后, 接着再将d 赋予值后
a原本的值就会变成null
此情况在某些装置上会发生,在某些装置上并不会发生。
因此我猜测arraylist a应该是被系统自动回收了?
请问大家对于此情况该如何避免呢?
谢谢
作者: mozzan (mozzan)   2015-02-28 19:39:00
你的问题不是很清楚,但手机须注意life cycle, 在activity创建时init好要用到的资料我的经验是当系统须呼叫onCreate时,这个activity就可能被回收掉部份资料
楼主: sweet00914 (别理我)   2015-02-28 21:14:00
A.b.c.d赋予值的时机在onCreate且采用异步的方式取得值
作者: givemepass (λ)   2015-02-28 21:15:00
印log看什么时候被回收掉?
楼主: sweet00914 (别理我)   2015-02-28 21:15:00
请问有何方式可以保存值?不被回收呢?
作者: ssccg (23)   2015-02-28 22:18:00
把reference放在不会被回收的地方,如static或application或是在onSaveInstanceState的地方存起来,在onCreate再从进来的bundle读回来可是在onCreate中赋值,应该本来就每次都会赋值了吧问题可能在你异步取值有没有做完,什么时候做完吧
作者: qweqweqweqwe (4qwe)   2015-02-28 23:11:00
不太可能无缘无故被回收 应该是有地方写错了吧最简单的就是用final 先把 list init 然后onCreate 把值写入 这样可以避免不小心设成 null
作者: KeySabre (KeySabreur)   2015-03-01 14:40:00
arraylist挂在activity上 而activity结束生命周期的时间并不一定 当系统资源较紧绷时 不用的activity会比较快被gc暂存资料挂在static也没意义 整个application被结束回收后还是会不见应该写到perferences或db或file 每次开启先检查暂存 决定是否更新暂存暂存在memory只能保证此次执行能用 但你不能保证自己的执行何时被系统结束不过这边讲的只是概念 实际上我们不知道你程式码长怎样但没有“无缘无故回收”这种事 应该要想办法知道缘故
作者: qweqweqweqwe (4qwe)   2015-03-01 17:24:00
当arraylist放在activity内 activity被回收后拿不到arraylist 完全是预期内的事但我想说的是 在class内直接宣告成final也会有问题?没有有可能只是时机点的问题呢?
作者: beyondthe (bb)   2015-03-02 02:13:00
没有无缘无故被gc +1
作者: KeySabre (KeySabreur)   2015-03-02 10:12:00
定义先搞懂 1.final 2.gc
作者: gpc (gpc)   2015-03-02 15:26:00
有reference不会被清掉 应该是偶发逻辑错误
作者: lovelycateye (我还想要更多力量)   2015-03-03 01:15:00
发问不附code,此风不可长。有code有真相啦

Links booklink

Contact Us: admin [ a t ] ucptt.com