Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android強弱引用教程

Android強弱引用教程

編輯:關於Android編程

Android源碼中,大量存在sp/wp。RefBase是Android的native層(C++)上所有對象的祖師爺,位同Java世界的Object。在Android Native體系架構中,利用RefBase的sp(strong pointer)和wp(weak pointer)通過一套強弱引用計數實現對對象生命周期的管理。

2. RefBase

RefBase有一個成員變量mRefs為weakref_impl指針,weakref_impl對象便是用來管理引用計數的。

引用類型 強引用計數 弱引用計數 sp構造 +1 +1 wp構造   +1 sp析構 -1 -1 wp析構   -1
  • 在構造一個實際對象的同時,會自動創建一個weakref_impl對象;
  • 強引用為0時,實際對象被delete;
  • 弱引用為0時,weakref_impl對象被delete;

3. promote

弱引用不能直接操作目標對象,根本原因是在於弱指針類沒有重載*和->操作符號,而強指針重載了這兩個操作符號。可通過promote()函數,將弱引用提升為強引用對象

  • promote作用試圖增加目標對象的強引用計數;
  • 由於目標對象可能已經被delete掉了,或者是其它的原因導致提升失敗;

4.生命周期

  • flags為0,強引用計數控制實際對象的生命周期,弱引用計數控制weakref_impl對象的生命周期。
    • 強引用計數為0後,實際對象被delete。所以對於這種情況,應使用wp時要由弱生強。
  • flags為LIFETIME_WEAK,強引用計數為0,弱引用計數不為0時,實際對象不會被delete。
    • 當弱引用計數減為0時,實際對象和weakref_impl對象會同時被delete。
  • flags為LIFETIME_FOREVER,對象不受強弱引用計數的控制,用不會被回收。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved