Android Cursor原始碼筆記 1

2021-07-02 07:36:39 字數 1952 閱讀 3744

cursor介面:extends closeable,沒啥說的.因為本身就是乙個介面,所以其原始碼的最大價值其實就是作為乙份guide存在,注釋還有讓人讀的慾望的. 就當翻譯一遍guide了.不過有些太過直白的函式就不cover了. cursor說白了就是乙個row set附贈一些輔助函式.

gettype(int columnindex): 返回某個column的型別:

getposition(): 返回cursor 在row set中的位置,起始位置為0,cursor初始時的位置是-1(因此一般需要movetofirst()作為初始化),對於已經到最後乙個row的cursor,如果繼續next(),那麼cursor的pos就是 row 的 number(和-1遙遙呼應, -1是前位哨兵,rownum是后位哨兵).

boolean move(int offset): 移動cursor,如果移超了會被pos會被強制為哨兵位置,返回值代表移動到的新位置是不是乙個可達有效的位置。

movetofirst()/last(), 只有在cursor是empty的情況下才會是false.s

isbeforefirst()/isafterlast(),判斷是否在哨兵位.

getcolumnindex(string columnname), 查詢是否有columnname的column在當前的 row set中,不存在的話返回-1,否則返回index(以0為起始位),getcolumnindexorthrow(string columnname)一樣,不過更為嚴厲,不存在就拋異常了。

getblob/string/short….等getter,在column的value是null,或者column type不匹配,或者是無效值的情況(比如long short都會做極值判斷的)下是會拋異常的,要注意。

deactivate(),暫時disable這個cursor(可以理解內部有些資源已經釋放了),所有的請求都會fail,主要是為了節省資源,deactivate()後,cursor耗費資源會少一點.但是呢已經和冤家requery()一起deprecated了.

close()和deactivate()不同的是一種徹底的關閉和釋放,不可逆.

registercontentobserver(contentobserver observer),為此cursor註冊乙個change的observer,注釋裡這麼說:一般來說,只有requery()才會引起data change, 因為他監控的是the content backing this cursor.s

setnotificationuri(contentresolver cr, uri uri), 用來watch某個uri的change,這個uri可以是某一行,也可以是乙個content type.

getwantsallonmovecalls()onmove()只有在該函式返回true時才會被跨程序呼叫。判斷是不是cusor 所有的movement會引發一次onmove().

getextras()就是給cursor乙個儲存帶外資訊的地方,類似於view的tag.

respond(bundle extras)也是乙個帶外性質的方法,其實就是乙個自定義的介面,使用者可以通過override這個方法來實現對curosr的某些自定義操作.

AbstractCollection原始碼分析

abstractcollection抽象類提供了collection的骨架實現,collection分析請看 這裡直接看它的 是如何實現的.public abstract iterator iterator 該方法沒有實現.public abstract int size 該方法沒有實現.publi...

ThreadPoolExecutor原始碼閱讀

執行緒池解決兩個問題 一是復用執行緒,減少建立銷毀執行緒帶來系統開銷 二是限定系統資源使用邊界,避免大量執行緒消耗盡系統記憶體 適用於互不依賴,執行時間短,不需要對執行緒控制操作的執行緒 新增任務時,1.若執行緒數量小於corepoolsize,則新增執行緒執行任務 2.若執行緒數量大於等於core...

OrangePi One Android 原始碼編譯

一 系統環境搭建參照 二 lichee原始碼編譯 1.檢視help build.sh h2.配置核心 cd linux 3.4 make arch arm menuconfig 進入配置頁面,上下移動列表,空格是選擇列表,左右移動選擇退出選項 3.首次編譯執行清除 在 lichee linux3.4...