2015-09-22 42 views
1

我最近一直在觀看谷歌Android開發人員關於刪除引用對象的重要性,當你完成他們...我已經實現了一個簡單的清理方法。這實際上會起作用嗎?好記憶類清理練習?

例如,我在我的應用程序的視圖上做了很多動畫。讓事情更乾淨我爲不同班級的活動製作動畫。我將活動的引用傳遞給tweenanimation類。

public void onStart() { 
    tweens = new TweenUm(this); 
} 

,並在我的onStop我做...

public void onStop() { 
    tweens.cleanup(); 
    tweens = null; 
    super.onStop(); 
} 

我的清除方法看起來像......

public void cleanup() { 
    mainAct = null; 
    fab = null; 
    fabcrad=null; 
    searchFor = null; 
} 

mainact是我傳遞的活動,再加上其他的意見我想刪除參考。

請問這有什麼好處?

回答

1

沒有必要添加方法cleanup

因爲您置零的參考對象tweens,如果沒有其他參考文獻都在存儲器中,tweens編程和維持和僅通過補間(mainAct,FAB,fabcrad,searchFor)引用的所有內部目的將從存儲器通過垃圾收集器來釋放。使用方法只關閉資源(如文件,套接字等)。

注意:當歸零充斥着重要的創造(和調用)清理是不是一個好的選擇,事實上有兩種可能性:

  • 到補間沒有其他的引用存在,所以調零內部引用是沒有必要的
  • 對補間的其他參考存在,在這種情況下,您可能會破壞進入無效狀態的補間內部狀態。

因此,一般來說,如果您不需要關閉外部打開的資源,那麼使用清理方法並不是一個好習慣。

+0

非常感謝,但在這種情況下,它仍然是一個很好的做法,把 tweens = null;刪除ref並將其提供給GC? – aidanmack

+0

是將null填充到補間是正確的。但是這個方法的清理不是一個ggod解決方案,事實上有兩種可能:1)沒有其他的補間引用存在,所以無需內部引用2)對補間的其他引用存在,在這種情況下,你可能會打破內部狀態補間進入無效狀態。所以通常這不是一個好習慣。 –