淺談Android引用計數(2)

在淺談Android引用計數(1)中講了LightRefBase實現對象計數管理的原理,這篇文章將要分析重量級的引用基類:RefBase的實現和它的作用。

下面是RefBase和相關類的類圖:

圖中可以看出,RefBase類有一個成員變量 mRefs,它指向一個weakref_impl對象。這個對象管理這RefBase的生命週期,其中weakref_impl類中有兩個引用計數:一個表示強引用的個數,一個表示弱引用的個數。

RefBase的生命週期控制方式有兩種:

1.受強引用控制:即weakref_impl類中的mFlag的值爲OBJECT_LIFETIME_STRONG;

2.受弱引用控制:即weakref_impl類中的mFlag的值爲OBJECT_LIFETIME_WEAK;

當生命週期控制方式爲1的時候,weakref_impl中的強引用計數爲0的時候就會銷燬RefBase對象,但是不會銷燬weakref_impl對象。

當生命週期控制方式爲2的時候,只有當強弱引用都爲0的時候,纔會銷燬RefBase,同時也會銷燬weakref_impl。

要想自己定義的類也能實現引用計數的管理,就要繼承RefBase。RefBase默認的生命週期控制方式是受強引用控制。在使用wp中的保存的m_ptr指針的時候一定要檢查指針是否有效,要調用promote()函數,檢查返回的sp是否爲空,如果爲空表示RefBase已經被銷燬。

 

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