android其實很簡單--內存相關

內存泄漏

java是垃圾回收語言,無需開發者管理內存分配

邏輯上的失誤導致內存泄漏:當應用不再需要這個對象的時候仍未釋放該對象的所有應用

1.Context,由於Content包含了大量的內存引用。
全局的process的static引用activity

2.static view

2.靜態inner classes
內部類持有外部類的強引用

3.匿名類
當acitivity被銷燬的時候,匿名的AsyncTask會持有activity的強引用直到asynctask結束

避免在Activity中使用非靜態內部類,如果該類的實例會存在在Activity的生命週期之外

4.Handler
與匿名類類似,當message沒處理完時,handler不會被釋放

5.Threads
thread沒運行結束時,也會持有activity

6.TimerTask
只要是匿名類的實例,不管是不是在工作線程,都會持有Activity的引用,導致內存泄漏。
靜態內部類代替匿名類,使用弱引用訪問外部類

7.Sensor Manager listener
沒有註銷監聽器,也會導致內存泄漏

GC

沒有GCRoot的對象將被回收

1.強引用

  • 當其指示的對象沒有任何強引用對象指向它;

2.軟引用

  • 當其指示的對象沒有任何強引用對象指向它;
  • 當虛擬機內存不足時。

3.弱引用

  • WeakReference不改變原有強引用對象的垃圾回收時機,一旦其指示對象沒有任何強引用對象時,此對象即進入正常的垃圾回收流程。

    1. 虛引用

方法

LeakCanary

參考

簡書:[譯]Android內存泄漏的八種可能(上)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章