# 以Memory角度最佳化 -

Avoid Memory Leak

Memory Leak?

何謂memory leak?

當宣告的Object已經不被使用,但仍然被reference,以至於經過一段時間或memory空間不足時,系統透過GC機制釋放出物件不再使用的memory空間時,發生此物件仍然被其他code把持、參考、引用,造成所佔用memory無法被即時釋放出來,此動作就稱為memory leak。若此狀況久而久之持續發生,就會造成GC動作持續頻繁發生,最後製造出的問題可想而知。若最後memory都因memory leak 長期佔用memory空間資源來不及釋放,導致memory不夠使用,進一步會發生OOM(Out of Memory)。

PS.GC在執行時,所有的process和thread均暫停目前工作直到GC機制處理完。

DON'T LEAK VIEW

  • 避免使用static,因為生命週期過長(如下圖所示),易導致leak。(ex.Context)

  • 使用Application的Context, Application Context的生命週期和應用的生命週期一樣長,而不是取決於某個Activity的生命週期。

  • 使用WeakReference代替強引用。比如可以使用WeakReference<Context> mContextRef:該部分的詳細內容也可以參考Android中Article部分。

  • 即時關閉cursor資源。

  • thread使用要小心,因為其生命週期無法控制。

    • 若頻繁呼叫thread,可考慮使用thread pool。
  • 使用Bitmap時記得呼叫recycle()。

  • 對Adapter記得呼叫

public View getView(int position, View convertView, ViewGroup parent)

results matching ""

    No results matching ""