Android:当一个Activity被销毁时,是否有任何设置引用null的优势?

时间:2016-02-01 10:25:03

标签: android garbage-collection

由于垃圾收集器使用Mark-Sweep算法:

  

使用Mark-Sweep算法完成实际的GC。这个完成了   使用位向量来跟踪最初可以访问的对象   将根对象标记为可达。然后GC扫描了   地址顺序标记中堆中的对象。每个可达到的   扫过它的对象标记从该对象可到达的所有对象   可达。如果新对象的地址较低,则将其添加到a   工作队列。初始扫描后,工作队列是

所以它会传递每个对root引用的对象,并且每次收集其他对象时是否有任何情况下对一个Activity引用null是有用的?

加上onDestroy我认为没有正确的优势? 如何将onPause(在验证isFinishing之后)放在" heavy"活动。是否有助于更快地收集资源?

2 个答案:

答案 0 :(得分:3)

  

所以它会传递每个对root引用的对象,并且每次收集其他对象时是否有任何情况在对一个Activity上引用null是有用的?

是。如果是static

  

穿上onDestroy我认为没有正确的优势?

我认为这是微不足道的,因此毫无意义,因为活动将暂时不再是GC-root-based

  

...如何在ontause上将它们作为null放在“重”活动上。是否有助于更快地收集资源?

如果某个对象没有GC根,则符合GC条件。 OnPause发生在onDestroy之前的某个时间点(取决于执行情况,这可能任何时间范围)ergo 以上问题。

但是!您不希望这样做,因为您的活动可能会在onPause之后回到前台并且您将不得不再次分配所有'重'对象 - 这将是很可能最终会给最终用户带来糟糕的体验。

答案 1 :(得分:0)

通过制作任何 object = null ,我们间接告知垃圾收集不需要使用该对象(使其符合垃圾收集条件)