編輯:關於Android編程
在前面有提到批量添加聯系人:Android批量添加聯系人到通訊錄,通話記錄和通訊錄一樣都是直接操作ContentProvider。為了使批量更新、插入、刪除數據更加方便,android系統引入了 ContentProviderOperation類,使用ContentProviderOperation的理由
1.所有的操作都在一個事務中執行,這樣可以保證數據完整性
2.由於批量操作在一個事務中執行,只需要打開和關閉一個事務,比多次打開關閉多個事務性能要好些
3.使用批量操作和多次單個操作相比,減少了應用和content provider之間的上下文切換,這樣也會提升應用的性能,並且減少占用CPU的時間,當然也會減少電量的消耗。
首先定義一個通話記錄的實體類
package com.csr.BTApp.apical.domain;
public class Tb_calllogs {
private String mNumber; // 號碼
private String mName; // 在通訊錄中的聯系人
private int mCallLogType; // 通話記錄的狀態 1:來電 2:去電 3:未接
private Long mCallLogDate; // 通話記錄日期
private int mCallLogDuration; // 通話記錄時長
public Tb_calllogs() {
}
public Tb_calllogs(String mNumber, String mName, int mCallLogType,
Long mCallLogDate, int mCallLogDuration) {
super();
this.mNumber = mNumber;
this.mName = mName;
this.mCallLogType = mCallLogType;
this.mCallLogDate = mCallLogDate;
this.mCallLogDuration = mCallLogDuration;
}
public String getmNumber() {
return mNumber;
}
public void setmNumber(String mNumber) {
this.mNumber = mNumber;
}
public String getmName() {
return mName;
}
public void setmName(String mName) {
this.mName = mName;
}
public int getmCallLogType() {
return mCallLogType;
}
public void setmCallLogType(int mCallLogType) {
this.mCallLogType = mCallLogType;
}
public Long getmCallLogDate() {
return mCallLogDate;
}
public void setmCallLogDate(Long mCallLogDate) {
this.mCallLogDate = mCallLogDate;
}
public int getmCallLogDuration() {
return mCallLogDuration;
}
public void setmCallLogDuration(int mCallLogDuration) {
this.mCallLogDuration = mCallLogDuration;
}
@Override
public String toString() {
return "Tb_calllogs [mNumber=" + mNumber + ", mName=" + mName
+ ", mCallLogType=" + mCallLogType + ", mCallLogDate="
+ mCallLogDate + ", mCallLogDuration=" + mCallLogDuration + "]";
}
}
添加單條通話記錄
/**
* 往數據庫中新增通話記錄
*
* @param name
* @param number
*/
public static void AddCallLogs(Tb_calllogs calllog) {
ContentValues values = new ContentValues();
values.clear();
values.put(CallLog.Calls.CACHED_NAME, calllog.getmName());
values.put(CallLog.Calls.NUMBER, calllog.getmNumber());
values.put(CallLog.Calls.TYPE, calllog.getmCallLogType());
values.put(CallLog.Calls.DATE, calllog.getmCallLogDate());
values.put(CallLog.Calls.DURATION, calllog.getmCallLogDuration());
values.put(CallLog.Calls.NEW, "0");// 0已看1未看 ,由於沒有獲取默認全為已讀
mContext.getContentResolver().insert(CallLog.Calls.CONTENT_URI, values);
}批量操作
public static void BatchAddCallLogs(List傳入list遍歷所有的list後,添加到ContentProviderOperation最後才調用applyBatch效率會高很多。list) throws RemoteException, OperationApplicationException { GlobalConstants.PrintLog_D("[GlobalVariables->]BatchAddCallLogs begin"); ArrayList ops = new ArrayList (); ContentValues values = new ContentValues(); for (Tb_calllogs calllog : list) { values.clear(); values.put(CallLog.Calls.CACHED_NAME, calllog.getmName()); values.put(CallLog.Calls.NUMBER, calllog.getmNumber()); values.put(CallLog.Calls.TYPE, calllog.getmCallLogType()); values.put(CallLog.Calls.DATE, calllog.getmCallLogDate()); values.put(CallLog.Calls.DURATION, calllog.getmCallLogDuration()); values.put(CallLog.Calls.NEW, "0");// 0已看1未看 ,由於沒有獲取默認全為已讀 ops.add(ContentProviderOperation .newInsert(CallLog.Calls.CONTENT_URI).withValues(values) .withYieldAllowed(true).build()); } if (ops != null) { // 真正添加 ContentProviderResult[] results = mContext.getContentResolver() .applyBatch(CallLog.AUTHORITY, ops); // for (ContentProviderResult result : results) { // GlobalConstants // .PrintLog_D("[GlobalVariables->]BatchAddCallLogs " // + result.uri.toString()); // } } }
Android RenderScript實現高斯模糊
昨天看了下RenderScript的官方文檔,發現RenderScript這厮有點牛逼。無意中發現ScriptIntrinsic這個抽象類,有些很有用的子類。其中有個子類
android開發筆記之自定義開關按鈕
今天來講講自定義單個控件,就拿開關按鈕來講講,相信大家見了非常多這樣的了,先看看效果:我們可以看到一個很常見的開關按鈕,那就來分析分析。首先:這是由兩張圖片構成:①一張為
Android下屏幕適配
適配:即當前應用在相同的手機上面顯示相同的效果。適配前需要首先確定當前手機所屬像素密度類型(如:xhdpi、hdpi、mdpi等),然後計算其像素密度,按一定比例給出界面
Android實現帶附件的郵件發送功能
本文實例講解了基於基於JMail實現Android郵件發送功能,分享給大家供大家參考,具體內容如下在android上發送郵件方式:第一種:借助GMail APP客戶端,缺