moveToFirst和moveToNext的區別

2021-08-06 07:42:57 字數 2601 閱讀 6436

在第一次使用,也就是剛得到cursor物件的時候,使用這兩個方法都能得到一樣的效果,就是把游標記錄指定到第一行記錄.

從原始碼中可以看出端倪

cursor是個介面,具體的實現類是abstractcursor

abstract classabstractcursorimplementscrossprocesscursor
public inte***cecrossprocesscursorextendscursor
在abstractcursor中實現了這兩個方法:

@override

public final boolean movetofirst()

@override

public final boolean movetonext()

可以看出,最終是呼叫了movetoposition定位到絕對位置,而這裡的mpos初始值是-1;

public abstractcursor()

這裡再補充一下呼叫contentresolver的過程,一般是這樣呼叫的getcontext.getcontentresolver 得到乙個contentresolve(抽象類)物件.

而getcontentresolver這個方法是在具體的contextimpl類中實現的.

@override

public contentresolver getcontentresolver()

super(context);

mmainthread = mainthread;

}@override

protected icontentprovider acquireprovider(context context, string name)

@override

protected icontentprovider acquireexistingprovider(context context, string name)

@override

public boolean releaseprovider(icontentprovider provider)

private final activitythread mmainthread;

}執行contentresolver的query方法,會先去查詢contentprovider在客戶端的**contentproviderproxy(該類實現了icontentprovider介面,所以會直接返回這個介面)

public final cursor query(uri uri, string projection,

string selection, string selectionargs, string sortorder)

try

// force query execution

qcursor.getcount();

long durationmillis = systemclock.uptimemillis() - starttime;

maybelogquerytoeventlog(durationmillis, uri, projection, selection, sortorder);

} catch (remoteexception e) catch(runtimeexception e)

}

最終會呼叫activitythread的同名的方法,去通過跨程序獲取provider的**.跟進去看一下acquireprovider方法:

public final icontentprovider acquireprovider(context c, string name)  else  //end else

} //end synchronized

return provider;

實際上拿到的這個icontentprovider物件,是binder服務端的具體實現類contentprovidernative

該類中的query方法:

public cursor query(uri url, string projection, string selection,

string selectionargs, string sortorder) throws remoteexception

return adaptor;

}

返回了乙個bulkcursortocursoradatper物件,

public final class bulkcursortocursoradaptor extends abstractwindowedcursor

public abstract class abstractwindowedcursor extends abstractcursor

主要這裡我們想要看這個provider執行query後返回的具體的cursor物件是哪個?所以說這個cursor物件是服務端返回的.

mov和movl 的區別

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!組合語言 assembly language 中 mov和movl 有什麼區別 舉例說明 in a word,they belong to two instruction set,movl is at t and mov is intel 參考正確...

彙編 lea指令和mov指令

load effective address,載入有效位址,可以將有效位址傳送到指定的的暫存器。指令形式是從儲存器讀資料到暫存器,效果是將儲存器的有效位址寫入到目的運算元,簡單說,就是c語言中的 在cpu內或cpu和儲存器之間傳送字或位元組,它傳送的資訊可以從暫存器到暫存器,立即數到暫存器,立即數到...

mov格式解析

peter lee 2008 06 14 一 簡介 二 原子 原子是quicktime用來構建等級資料結構的基本容器。新建立的quicktime原子就象樹的根。隨後的每個原子都包含在其中並且包含資料和其它原子。如果乙個quicktime原子包含其它原子,就被叫做父原子,包含在其中的原子就叫做葉原子。...