我有一個自定義
android從服務器獲取數據?Android ContentProvider,它存儲和檢索sqlite數據庫中的數據.
我們假設其中一個數據庫表有一個_ID列和一個NAME列以及如下內容:
|==========|==========|
| _ID | NAME |
|==========|==========|
| 1 | d1 |
| 2 | d2 |
| 3 | d3 |
| 4 | d4 |
|==========|==========|
此sqlite DB與遠程數據庫保持同步,并通過網絡定期獲取新數據.
表中可能的操作如下:
>可以刪除現有行
>可以添加新行
>可以修改現有行的NAME列
現在假設所有可能的操作立即發生,并且在從遠程服務器獲取一些最新數據之后,該表的新內容必須設置如下:
|==========|==========|
| _ID | NAME |
|==========|==========|
| 1 | d7 |
| 3 | d3 |
| 4 | d6 |
| 5 | d5 |
|==========|==========|
可以有兩種不同的方法:
>查詢數據庫并檢查每個現有行以查看是否需要更新,然后添加任何新行并刪除任何缺失的行 – 盡管如果我們想要使用分頁方法更新數據庫,這種方法可能有點棘手沒有一個網絡提取
>使用單個DELETE sql命令刪除整個表,然后添加從服務器接收的所有行
在Android上,我目前正在使用批處理操作實現第二種方法,以最大限度地提高性能:
final ArrayList operations = new ArrayList();
// with this URI,the content provider deletes all rows
operations.add(ContentProviderOperation.newDelete(Users.CONTENT_URI).build());
final ContentValues values = new ContentValues();
values.put(ID_COLUMN,1);
values.put(NAME_COLUMN,"d7");
values.put(ID_COLUMN,3);
values.put(NAME_COLUMN,"d3");
values.put(ID_COLUMN,4);
values.put(NAME_COLUMN,"d6");
values.put(ID_COLUMN,5);
values.put(NAME_COLUMN,"d5");
operations.add(ContentProviderOperation.newInsert(Users.CONTENT_URI).withValues(values).build());
getApplicationContext().getContentResolver().applyBatch(MyContentProvider.AUTHORITY,operations);
這是最好的方法,還是方法1(或其他方法)在性能方面更好?
編輯:例如,采用方法2,重寫的ContentProvider#bulkInsert使用數據庫事務可以大大加快批量插入操作:見this question.
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态