3 回答

TA貢獻1777條經(jīng)驗 獲得超10個贊
您的查詢效率低下,您目前正在為每個聯(lián)系人執(zhí)行一個非常慢的查詢,您可以通過一個大查詢(非常快)獲得所有信息:
String[] projection = new String[] { Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER };
Cursor c = cr.query(Phone.CONTENT_URI, projection, null, null, null);
while (c.moveToNext()) {
long contactId = c.getLong(0);
String name = c.getString(1);
String phone = c.getString(2);
Log.i("Phones", "got contact phone: " + contactId + " - " + name + " - " + phone);
}
c.close();

TA貢獻1828條經(jīng)驗 獲得超6個贊
您可以考慮使用該Paging
庫:https ://developer.android.com/topic/libraries/architecture/paging/
它的設(shè)計理念是列表僅顯示一定數(shù)量的項目,因此實際上無需加載超出其可能顯示的方式。例如,一個 ListView 可能只顯示 10 個聯(lián)系人,因此無需獲取 600 個聯(lián)系人。
相反,當(dāng)用戶滾動時,分頁庫將獲取更少量的數(shù)據(jù),從而消除 600 個聯(lián)系人的加載時間、600 個聯(lián)系人的內(nèi)存等等......從而提高效率。

TA貢獻1824條經(jīng)驗 獲得超5個贊
如果您擔(dān)心速度,我會嘗試使用 Set,盡管 ArrayList 中有 600 多個聯(lián)系人應(yīng)該不成問題。當(dāng)數(shù)據(jù)集達到數(shù)百萬甚至更多時,它就會成為一個問題。我會嘗試查看您的代碼中的任何其他低效之處。
就 Set 而言,最常見的兩種 Java 數(shù)據(jù)結(jié)構(gòu)是 HashSet 和 TreeSet。TreeSet 如果你想對集合進行排序。HashSet 稍微快一點,但是你失去了排序。兩者都有 O(1) 訪問時間。
添加回答
舉報