編輯:關於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()); // } } }
昨天看了下RenderScript的官方文檔,發現RenderScript這厮有點牛逼。無意中發現ScriptIntrinsic這個抽象類,有些很有用的子類。其中有個子類
今天來講講自定義單個控件,就拿開關按鈕來講講,相信大家見了非常多這樣的了,先看看效果:我們可以看到一個很常見的開關按鈕,那就來分析分析。首先:這是由兩張圖片構成:①一張為
適配:即當前應用在相同的手機上面顯示相同的效果。適配前需要首先確定當前手機所屬像素密度類型(如:xhdpi、hdpi、mdpi等),然後計算其像素密度,按一定比例給出界面
本文實例講解了基於基於JMail實現Android郵件發送功能,分享給大家供大家參考,具體內容如下在android上發送郵件方式:第一種:借助GMail APP客戶端,缺