編輯:關於Android編程
今天做到一個小項目,查詢手機中短信的信息,當然得去系統暴露出來的數據庫中去查詢了,後來發現有三種方式可以選擇,下面一一寫出來。
第一種方式,采用 getContentResolver().query()方法在主線程中查詢數據。這種查詢方式是不是異步查詢的,直接在UI線程中查詢數據,代碼如下:
Cursor cursor1 = getContentResolver().query(Sms.CONVESATION_URI, CONVERSATION_PROJECTION,null, null, sms.date desc);
while (cursor1.moveToNext()) {
Log.i(cursor1, String.valueOf(cursor1.getInt(0)));
Log.i(cursor1, cursor1.getString(1));
Log.i(cursor1, cursor1.getString(2));
}
cursor1.close();
第二種查詢方式,這種查詢同樣是在UI線程中查詢數據,不過這種方式得到的Cursor不用手動去關閉,是Activity自動會去關閉的,cursor由activity去管理,代碼如下:
Cursor cursor2 = managedQuery(Sms.CONVESATION_URI, CONVERSATION_PROJECTION, null, null, sms.date desc);
while (cursor2.moveToNext()) {
Log.i(cursor2, String.valueOf(cursor2.getInt(0)));
Log.i(cursor2, cursor2.getString(1));
Log.i(cursor2, cursor2.getString(2));
}
第三種查詢方式,這種方式是利用Android提供的異步查詢框架AsyncQueryHandler,/是一種異步查詢方式,當單查詢完畢後,會調用onQueryComplete(token, cookie, cursor)通知查詢完畢,並且傳回cursor。代碼如下:
private void startQuery() {
Uri uri = Sms.CONVESATION_URI;
mQueryHandler.startQuery(0, null, uri, CONVERSATION_PROJECTION, null, null, sms.date desc);
}
// 寫一個異步查詢類
private final class QueryHandler extends AsyncQueryHandler {
public QueryHandler(ContentResolver cr) {
super(cr);
}
@Override
protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
super.onQueryComplete(token, cookie, cursor);
// 更新mAdapter的Cursor
mAdapter.changeCursor(cursor);
}
}
Android App的設計架構:MVC,MVP,MVVM與架構經驗談
和MVC框架模式一樣,Model模型處理數據代碼不變在Android的App開發中,很多人經常會頭疼於App的架構如何設計:我的App需要應用這些設計架構嗎?MVC,MV
Android 塗鴉最佳實踐
Android中實現手勢畫圖一般都兩種方式,一是直接在View上繪制,而是使用SurfaceView。兩者還是有一些差別的。簡介下。View:顯示視圖,內置畫布,提供圖形
快速搭建Android開發環境ADT-Bundle及Hello World
----下載JDK(Java Dev Kit) 官方下載:http://www.oracle.com/technetwork/java/javase/download
Google官方 詳解 Android 性能優化
為什麼關注性能對於一款APP,用戶首先關注的是 app的性能,而不是APP本身的屬性功能,用戶不關心你是否是搞社交,是否搞電商,是否是一款強大的美圖濾鏡app,用戶首先關