Android有Garbage Collection
吗?是否有效,或者在不需要时将对象设置为null
?
例如,我有ImageView
iv
。我用
iv.setImageBitmap(some_function_that_returns_a_bitmap_that_is_newly_created())
一段时间后我运行相同的功能
iv.setImageBitmap(some_function_that_returns_a_bitmap_that_is_newly_created())
第一个函数some_function_that_returns_a_bitmap_that_is_newly_created()
创建的位图会发生什么?垃圾收集是否将其删除?这样做是否有所作为
Bitmap temp =some_function_that_returns_a_bitmap_that_is_newly_created();
iv.setImageBitmap(temp);
temp = null;
...
temp =some_function_that_returns_a_bitmap_that_is_newly_created();
代替?
这样做有什么不同
Bitmap temp =some_function_that_returns_a_bitmap_that_is_newly_created();
...
temp = null;
...
temp =some_function_that_returns_a_bitmap_that_is_newly_created();
而不是
Bitmap temp = some_function_that_returns_a_bitmap_that_is_newly_created();
...
temp = some_function_that_returns_a_bitmap_that_is_newly_created();
答案 0 :(得分:1)
是的,Android的VM会进行垃圾回收。很少有地方可以将对象的引用置零是节省空间的有效方法......但是你已经击中了其中一个。
位图很大,非常明确地,它可以帮助将对不再需要的引用的引用置空。
在第二个示例中显示的代码中,您的直觉是正确的,对旧位图的引用将使其不被回收,直到将新位图的引用分配给temp
为止。这意味着在某些时候,两者都在记忆中。
您的代码的第一个版本没有这个问题。
编辑添加: 顺便说一句,Java中的标准做法是camelCasing,而不是under_scoring ;-P