亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android開發筆記之:深入理解Cursor相關的性能問題

2020-04-11 12:23:11
字體:
來源:轉載
供稿:網友

當數據庫中存有大量數據的時候,用Cursor查詢時要注意,有可能引發性能問題。數據庫查詢出來的Cursor都會由一個CursorWindow來進行數據管理,包括內存空間的申請和數據的填充。CursorWindow對Cursor中的內容大小有限制,限制為1024*1024也就是1M,換句話說Cursor中數據的大小不能超過1M,如果超過1M會引發如下的錯誤:

復制代碼 代碼如下:

08-23 05:48:31.838: DEBUG/Cursor(1805): skip_rows row 149
08-23 05:48:31.844: ERROR/CursorWindow(1805): need to grow: mSize = 1048576, size = 11499, freeSpace() = 7397, numRows = 80
08-23 05:48:31.844: ERROR/CursorWindow(1805): not growing since there are already 80 row(s), max size 1048576
08-23 05:48:31.844: ERROR/Cursor(1805): Failed allocating 11499 bytes for blob at 228,7
08-23 05:48:31.849: DEBUG/Cursor(1805): finish_program_and_get_row_count row 12
08-23 05:48:31.851: DEBUG/browser/BrowserBookmarkFoldersAdapter(1805): getView()-Position:149
08-23 05:48:32.019: DEBUG/Cursor(1805): skip_rows row 148

這表明CursorWindow中的空閑空間已經不足,已經在申請新的空間,但似乎申請失敗。這個錯誤有時候會導致查詢得到的Cursor為null,有時候不會引發太嚴重的問題。但是它會引起性能上的問題,不停的申請空間會占用大量的CPU時間,從而導致整個手機變卡。特別是在ListView或GridView中綁定的Cursor,會導致無法滑動,或者滑動變的十分的卡。用Android2.3的原生Browser,打開其中的歷史記錄,當有超過200條歷史記錄時,不停的滑動,特別是由下向上滑時會變的十分的卡,而對于其書簽,如果條目超過100,且每個都有縮略圖時,滑動會變得特別的卡,甚至都打不開,就是這個原因。
這個問題沒有根本的解法,這是Android系統的限制,唯一可行的就是想辦法避免,也就是盡可能讓Cursor的大小 小于1M,以下是可行的方法:
1. 只查詢需要的字段
這個特別重要,根據UI顯示的需要,或者實際的需要查詢需要的字段。就是一定要給ContentResolver.query(uri, projection)第二個參數PROJECTION,如果這個參數為null,那么就會查詢表中所有的字段,那么當條數一增加Cursor的大小 會增長很快。Browser中歷史記錄的原因就是它在query的時候查詢了所有的字段,其數所庫中保存了favicon和thumbnail二進制文件,因此當包含了這二個字段時,Cursor的容量很容易就達到了限制。
2. 二進制文件不要存在數據庫中
數據庫僅適用于保存一些較短文字,整數,布爾,浮點數等一些,易于查詢和操作的輕量級的數據,目的也是在于快速搜索和查詢。對于像圖片,較長的文字(如文章)等大數據,最好直接以文件形式存儲在硬盤中,然后在數據庫保存它們的訪問路徑。對于像favicon這樣的小圖片也可以考慮存在數據庫中,但是像對于thumbnail的圖片就不明智,除非整個應用在數量上有限制(比如只有幾十或百級)否則很容易在查詢的時候達到1M的限制。
3. 對于特別大量的數據超過5000級或萬級或十萬級或百萬級的要分段查詢
無論表中的一條記錄數據量如何的小,當條數達到5000級或者萬級或者更多的時候,還是會達到1M的限制,這時就需要分段查詢,比如每次查詢500個,或者1000個。另外,如果是要做展示用,這么多數據一下子出來,用戶也不方便查看。
【實例】Android2.3書簽,歷史記錄和最多訪問三個頁面當數據量達到300左右時,就會出現滑動很卡的現象,特別是由下向上滑動時,特別的卡,會狂打出:
復制代碼 代碼如下:

08-23 05:48:31.844: ERROR/CursorWindow(1805): need to grow: mSize = 1048576, size = 11499, freeSpace() = 7397, numRows = 80
08-23 05:48:31.844: ERROR/CursorWindow(1805): not growing since there are already 80 row(s), max size 1048576
08-23 05:48:31.844: ERROR/Cursor(1805): Failed allocating 11499 bytes for blob at 228,7

這樣的LOG。而書簽似乎都沒有辦法打開和滑動,其特別的卡。
究其原因就是它們在查詢的時候都用了同一個字段集Browser.HISTORY_PROJECTION這個是把bookmarks表中的所有字段都 查詢出來。書簽,歷史記錄和最多訪問雖是三個不同的展示頁,但它們的數據是相同的都是來自bookmarks表。Bookmarks表中存有_id,title,url,bookmark,favicon,touch_icon,thumbnail等字段,其中favicon和thumbnail是二進制圖片數據(byte[])。Browser.HISTORY_PROJECTION里面包含了所有的字段,當然也包含了favicon和thumbnail,所以當條目一旦達到200多時,Cursor就會達到其1M的限制,因此會導致性能下降,滑動變卡。

事實上對于歷史記錄和最多訪問二個頁面來講thumbnail和touch_icon根本就沒有用到,它只需要_id,title,url,bookmark和favicon;對于書簽頁,也僅是在GRID時才用到thumbnail。所以,只需要把查詢時的字段集Browser.HISTORY_PROJECTION中的THUMBNAIL去掉,即可以解決滑動變卡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲福利视频网站| 日韩成人av在线| 九九九久久久久久| 国产精品96久久久久久又黄又硬| 97视频国产在线| 亚洲深夜福利视频| 亚洲片在线观看| 国产精品九九久久久久久久| 亚洲最大激情中文字幕| 国产福利视频一区二区| 久久琪琪电影院| 日本久久久久久久久| 亚洲美女免费精品视频在线观看| 亚洲欧洲av一区二区| 欧美极品少妇xxxxⅹ裸体艺术| 欧美性猛交丰臀xxxxx网站| 亚洲高清一区二| 久久久久亚洲精品成人网小说| 国产成人综合久久| 精品丝袜一区二区三区| 中文字幕亚洲欧美在线| 日本aⅴ大伊香蕉精品视频| 欧美超级免费视 在线| 国产美女久久精品| 国产精品96久久久久久| 国产91精品青草社区| 中文在线资源观看视频网站免费不卡| 国产女人精品视频| 精品呦交小u女在线| 国外日韩电影在线观看| 亚洲成人激情小说| 91九色在线视频| 亚洲福利精品在线| 亚洲国产精彩中文乱码av| 亚洲91av视频| 国产精品三级在线| 亚洲成人精品在线| 久久久久女教师免费一区| 午夜欧美不卡精品aaaaa| 奇米一区二区三区四区久久| 欧美成人精品一区二区三区| 尤物yw午夜国产精品视频| 色综合男人天堂| 亚洲激情小视频| 精品国产户外野外| 欧美网站在线观看| 97成人在线视频| 国产成人在线一区二区| 91精品国产自产在线老师啪| 在线播放国产一区中文字幕剧情欧美| 日韩欧美在线免费观看| 欧美成人性色生活仑片| 国产精品九九久久久久久久| 欧美国产日韩一区二区在线观看| 992tv成人免费影院| 国产亚洲福利一区| 久久久久国产精品免费| 欧美日韩国产中文精品字幕自在自线| 亚洲日韩中文字幕| 亚洲精品成a人在线观看| 美女精品视频一区| 亚洲国产欧美自拍| 日韩影视在线观看| 韩国v欧美v日本v亚洲| 欧美性xxxxx| 性金发美女69hd大尺寸| 国产精品99免视看9| 久久精品视频在线观看| wwwwwwww亚洲| 啊v视频在线一区二区三区| 亚洲人永久免费| 日韩av网站导航| 国产美女被下药99| 国产成人激情视频| 成人免费视频在线观看超级碰| 成人免费在线视频网站| 91精品成人久久| 精品久久久久久| 亚洲人成电影网站色…| 2019中文字幕免费视频| 国内成人精品视频| 成人免费视频a| 欧美久久精品午夜青青大伊人| 91精品一区二区| 欧美日韩免费观看中文| 亚洲自拍偷拍色图| 亚洲激情小视频| 亚洲综合在线中文字幕| 亚洲色图欧美制服丝袜另类第一页| 亚洲综合在线做性| 国产免费一区视频观看免费| 中文字幕日韩av电影| 国产精品女视频| 不卡伊人av在线播放| 欧美高清videos高潮hd| 欧美激情欧美激情| 日本一区二三区好的精华液| 国产精品毛片a∨一区二区三区|国| 自拍偷拍免费精品| 欧美高清一级大片| 欧美中文在线免费| 亚洲精品一区二区三区婷婷月| 国产不卡精品视男人的天堂| 国产精品精品视频一区二区三区| 69久久夜色精品国产69乱青草| 91精品久久久久久久久青青| 亚洲人午夜精品免费| 国产视频欧美视频| 日本一区二三区好的精华液| 91精品视频网站| 久久久久久久一区二区| 久久国产精品影片| 国产欧亚日韩视频| 精品人伦一区二区三区蜜桃免费| 亚洲精品国产精品久久清纯直播| 国产精品第二页| 欧美日韩中国免费专区在线看| 久久久av一区| 亚洲欧美国产精品专区久久| 亚洲一区二区三区久久| 久久亚洲欧美日韩精品专区| 欧美亚洲另类视频| 欧美精品videos另类日本| 成人做爽爽免费视频| 亚洲自拍在线观看| 久久97久久97精品免视看| 亚洲成人精品在线| 日韩av中文字幕在线播放| 8050国产精品久久久久久| 久久久午夜视频| 欧美在线视频一二三| 日韩激情第一页| 一区二区三区亚洲| 欧美成人精品一区| 17婷婷久久www| 欧美一级淫片aaaaaaa视频| 日韩影视在线观看| 美女视频久久黄| 欧美日韩在线看| 中文字幕在线观看亚洲| 欧美一区深夜视频| 国产亚洲欧洲高清一区| 九九热r在线视频精品| 亚洲欧美国产一本综合首页| 久久久综合免费视频| 国产精品羞羞答答| 日韩精品电影网| 亚洲欧美日韩天堂一区二区| 欧洲永久精品大片ww免费漫画| 国产亚洲精品高潮| 亚洲经典中文字幕| 国产精国产精品| 国产成人在线亚洲欧美| 欧美激情xxxx性bbbb| 成人激情视频网| 亚洲韩国欧洲国产日产av| 2019中文字幕免费视频| 亚洲成人中文字幕| 中文字幕日韩视频| 亚洲自拍偷拍视频| 国产精品欧美日韩一区二区| 视频一区视频二区国产精品| 91爱视频在线| 日本三级韩国三级久久|