精品视频日韩无码,伊人久久无码av一区二区三区,久久艹视频国产视频,欧美成A人免费观看久久

  1. <tt id="u23fe"><i id="u23fe"><sub id="u23fe"></sub></i></tt>

      <b id="u23fe"><address id="u23fe"><kbd id="u23fe"></kbd></address></b>

      <source id="u23fe"><track id="u23fe"></track></source>
    1. 位置: 編程技術(shù) - 正文

      開源項(xiàng)目源碼解析-xUtils 源碼解析(開源項(xiàng)目怎么做)

      編輯:rootadmin
      xUtils 源碼解析

      推薦整理分享開源項(xiàng)目源碼解析-xUtils 源碼解析(開源項(xiàng)目怎么做),希望有所幫助,僅作參考,歡迎閱讀內(nèi)容。

      文章相關(guān)熱門搜索詞:開源的項(xiàng)目是什么意思,開源項(xiàng)目介紹,開源項(xiàng)目有什么用,開源項(xiàng)目怎么做,開源項(xiàng)目源碼解決方案,開源項(xiàng)目代碼,開源項(xiàng)目源碼解決方案,開源項(xiàng)目源碼解決方案,內(nèi)容如對您有幫助,希望把文章鏈接給更多的朋友!

      本文為 Android 開源項(xiàng)目源碼解析 中 xUtils 部分。項(xiàng)目地址:xUtils,分析的版本:c2ac,Demo 地址:xUtils Demo分析者:Caij,校對者:maogy,校對狀態(tài):未完成

      1. 功能介紹

      xUtils一個(gè)Android公共庫框架,主要包括四個(gè)部分:View,Db, Http, Bitmap 四個(gè)模塊。

      View模塊主要的功能是通過注解綁定UI,資源,事件。Db模塊是一個(gè)數(shù)據(jù)庫orm框架, 簡單的語句就能進(jìn)行數(shù)據(jù)的操作。Http模塊主要訪問網(wǎng)絡(luò),支持同步,異步方式的請求,支持文件的下載。Bitmap模塊是加載圖片以及圖片的處理, 支持加載本地,網(wǎng)絡(luò)圖片。而且支持圖片的內(nèi)存和本地緩存。2. 詳細(xì)設(shè)計(jì)2.1 View模塊2.1.1 總體設(shè)計(jì)

      流程和關(guān)系較少, 請看下面的詳細(xì)分析

      2.1.2 流程圖

      2.1.3 核心類功能介紹請先了解注解 ,動態(tài)代理 可以幫助到您, 如果已經(jīng)了解請忽略。

      注解和反射知識是這個(gè)模塊的主要內(nèi)容

      1.ViewUtils.java

      View和各種事件的注入以及資源的注入。

      (1)主要函數(shù)

      第一個(gè)參數(shù)Object handler代表的是需要注入的對象, 第二個(gè)參數(shù)是需要注入View(這個(gè)View就是handler的成員變量)所在的View或者Activity的包裝對象。該方法完成了View和各種事件的注入以及資源的注入。主要的原理就是通過反射和注解。

      完成Activity的setContentView。完成View的注入。完成資源的注入。完成各種事件的注入。2.ViewFinder.java(1)主要函數(shù)

      如果存在父View, 優(yōu)先從父View尋找,否則從當(dāng)前的View或者Activity中尋找。

      3.ResLoader.java

      獲取資源文件&#;。支持多種資源的獲取。

      4.EventListenerManager.java

      事件的注入, 其中的設(shè)計(jì)是通過動態(tài)代理。

      存放監(jiān)聽事件接口map。 因?yàn)橛行┙涌谟卸鄠€(gè)函數(shù), 代理會判斷事件接口是否存在, 如果存在只增加代理方法就夠了, 避免重新設(shè)置監(jiān)聽事件接口。

      代理監(jiān)聽事件

      5.注解類2.2 Db模塊2.2.1 總體設(shè)計(jì)

      流程和關(guān)系較少, 請看下面的詳細(xì)分析

      2.2.2 流程圖

      2.2.3 核心類功能介紹

      注解、反射和數(shù)據(jù)庫操作知識這個(gè)模塊的主要內(nèi)容

      1.DbUtils.java

      主要功能數(shù)據(jù)庫的創(chuàng)建,數(shù)據(jù)庫的增刪改查。

      存放DbUtils實(shí)例對象的map,每個(gè)數(shù)據(jù)庫對應(yīng)一個(gè)實(shí)例, key為數(shù)據(jù)庫的名稱。

      采取的是單例模式,根據(jù)DaoConfig創(chuàng)建數(shù)據(jù)庫, 中間還涉及到數(shù)據(jù)庫升級。

      增刪改查。

      2.DaoConfig.java

      數(shù)據(jù)庫配置類。

      3.FindTempCache.java

      在DbUtils的查詢數(shù)據(jù)中

      數(shù)據(jù)庫查詢數(shù)據(jù)的緩存。在查詢中會優(yōu)先調(diào)用緩存中的數(shù)據(jù)

      4.SqlInfoBuilder.java

      sql建表、增刪改語句的組合。

      5.SqlInfo.java

      sql語句和&#;包裝對象。

      6.Table.java

      表對象。

      7.Column.java

      表中列對象。

      8.Id.java

      表對應(yīng)的主鍵對象。

      9.Selector.java開源項(xiàng)目源碼解析-xUtils 源碼解析(開源項(xiàng)目怎么做)

      sql查詢語句的組合。

      .WhereBuilder.java

      sql條件語句的組合。

      DBUtils增刪改查:

      操縱數(shù)據(jù)庫的工具類,無論多牛X,總離不開最根本的CRUD,即創(chuàng)建,查詢,更新和刪除。下面從這四個(gè)角度依次介紹xUtils是如何簡便持久化數(shù)據(jù)的。大家都知道,在Android里面如果要存儲一個(gè)對象,我們需要?jiǎng)?chuàng)建一個(gè)SQLiteOpenHelper,然后還得創(chuàng)建一張對應(yīng)對象各個(gè)屬性的表,還得繼續(xù)把我們的對象轉(zhuǎn)換成ContentValues,進(jìn)而去存儲。真心是麻煩的不能再麻煩了,我們現(xiàn)在介紹的DbUtils就能讓你輕松解脫麻繩一樣的代碼。DbUtils在進(jìn)行save操作的時(shí)候,會根據(jù)java反射反射出對象的各個(gè)字段,然后去查詢數(shù)據(jù)庫中是否存在這個(gè)對象類型對應(yīng)的表,如果表已經(jīng)存在,直接進(jìn)行插入操作;如果不存在,就先動態(tài)的創(chuàng)建的一張對應(yīng)我們對象的表,再進(jìn)行插入處理。直接上代碼,大家看。

      [java] view plaincopy@OnClick(R.id.insert) public void insert(View v) { Student stu = null; for (int i = 0; i < ; i&#;&#;) { stu = new Student(); stu.setAge( &#; i); stu.setName("jack" &#; i); mList.add(stu); try { dbUtils.save(stu); } catch (DbException e) { e.printStackTrace(); } } } 注意:并不是所有的實(shí)體對象都快可以通過這種方式去存儲,一定要保證對象的類型中有int類型的id或者_(dá)id的屬性,這就對應(yīng)數(shù)據(jù)庫表中的主鍵字段。如果類型中沒有id字段,可以通過@Id注解去指定一個(gè)int類型的字段作為主鍵。如果表中的又字段不想被存儲在數(shù)據(jù)庫中,也可以通過@Transient去實(shí)現(xiàn)忽略。如果直接存儲一個(gè)對象的列表,這樣也是被允許的,達(dá)到批量存儲的目的。

      DbUtils可以幫助對SQL語句不是很熟悉的同學(xué)快速的實(shí)現(xiàn)查詢,而不用去寫sql查詢語句,而且可以對查詢結(jié)果進(jìn)行排序和分頁,使用簡單,功能強(qiáng)大。大家可以看下,下面的幾行代碼就能實(shí)現(xiàn)復(fù)雜的查詢功能

      [java] view plaincopydbUtils.findAll(Selector.from(Student.class) .where("_id", "<", ).and("age", ">", ).orderBy("_id") .limit(pageSize).offset(pageSize * pageIndex)); 同樣的,也可以對數(shù)據(jù)庫中得數(shù)據(jù)進(jìn)行便捷的更新。下面演示的是更新Student對應(yīng)的表中的第一條記錄的age這個(gè)字段。這個(gè)比較簡單,就直接上代碼看吧。[java] view plaincopy@OnClick(R.id.update) public void update(View v){ try { List<Student> stus = dbUtils.findAll(Selector.from(Student.class)); Student stu = stus.get(0); stu.setAge(); dbUtils.update(stu); } catch (DbException e) { e.printStackTrace(); } } 最后一個(gè)就是數(shù)據(jù)的刪除。一個(gè)實(shí)體對象,一組實(shí)體對象,根據(jù)條件刪除,刪除表,刪除整個(gè)數(shù)據(jù)庫,這些操作都可以通過一句簡單的代碼來實(shí)現(xiàn),看了代碼就明白了。[java] view plaincopy@OnClick(R.id.delete) public void delete(View v){ try { List<Student> stus = dbUtils.findAll(Selector.from(Student.class)); dbUtils.delete(stus.get(0)); dbUtils.deleteAll(stus); dbUtils.deleteById(Student.class, WhereBuilder.b("age", "==", )); dbUtils.dropTable(Student.class); dbUtils.dropDb(); } catch (DbException e) { e.printStackTrace(); } } 2.3 Http模塊2.3.1 總體設(shè)計(jì)

      2.3.2 流程圖

      2.3.3 類圖

      1.HttpUtils.java

      支持異步同步訪問網(wǎng)絡(luò)數(shù)據(jù), 斷點(diǎn)下載文件。

      2.HttpRequest.java

      網(wǎng)絡(luò)請求的包裝類。 包括url, 訪問請求方法, 參數(shù)&#;等。

      3.RequestCallBack.java

      完成數(shù)據(jù)請求回調(diào)接口。

      4.HttpHandler.java

      獲取網(wǎng)絡(luò)數(shù)據(jù)邏輯的實(shí)現(xiàn)。這里可以理解為系統(tǒng)內(nèi)部AsyncTask。訪問網(wǎng)絡(luò)數(shù)據(jù)處理流程圖

      5.HttpCache.java

      網(wǎng)絡(luò)數(shù)據(jù)的緩存,內(nèi)部包含LruMemoryCache。在獲取數(shù)據(jù)的時(shí)候會判斷是否過期。

      6.StringDownLoadHandler.java

      handleEntity()將網(wǎng)絡(luò)io流轉(zhuǎn)化為String。

      7.FileDownLoadHandler.java

      handleEntity()將網(wǎng)絡(luò)io流轉(zhuǎn)化為File。

      8.HttpException.java

      統(tǒng)一異常

      2.4 Bitmap模塊2.4.1 總體設(shè)計(jì)

      2.4.2 流程圖

      請查看http模塊

      2.4.3 類圖

      1.BitmapUtils.java

      圖片的異步加載,支持本地和網(wǎng)絡(luò)圖片, 圖片的壓縮處理, 圖片的內(nèi)存緩存已經(jīng)本地緩存。

      設(shè)置圖片流程圖

      詳細(xì)流程圖

      2.BitmapLoadTask.java

      加載圖片的異步任務(wù)。在doInBackground中讀取圖片資源

      3.BitmapCache.java(1)主要函數(shù)4.BitmapGlobalConfig.java

      配置, 包括線程池, 緩存的大小。

      5.BitmapDisplayConfig.java6.DefaultDownloader.java

      獲取bitmap, 支持三種獲取路徑, 本地文件,資產(chǎn)文件, 和網(wǎng)絡(luò)圖片。

      7.DefaultBitmapLoadCallBack.java

      圖片加載完成的的回調(diào), 默認(rèn)回調(diào)將獲取的bitmap&#;傳遞給view。

      3. 雜談

      和Volley框架相比

      相同點(diǎn):1.采用了網(wǎng)絡(luò)數(shù)據(jù)緩存機(jī)制。2.通過handler進(jìn)行線程通信不同點(diǎn):Volley的Http請求在 android 2.3 版本之前是通過HttpClient ,在之后的版本是通過URLHttpConnection。xUtils都是通過HttpClient請求網(wǎng)絡(luò)(bitmap模塊圖片下載是通過URLHttpConnection)。 URLHttpConnection默認(rèn)支持GZIP壓縮,api操作簡單。2.Volley將Http請求數(shù)據(jù)先緩存進(jìn)byte[], 然后是分配給不同的請求轉(zhuǎn)化為需要的&#;式。xUtils是直接轉(zhuǎn)化為想要的&#;式。 Volley:擴(kuò)展性好, 但是不能存在大數(shù)據(jù)請求,否則就OOM。xUtils:不緩存入byte[] 支持大數(shù)據(jù)的請求, 速度比Volley稍快,但擴(kuò)展性就低。4.Volley訪問網(wǎng)絡(luò)數(shù)據(jù)時(shí)直接開啟固定個(gè)數(shù)線程訪問網(wǎng)絡(luò), 在run方法中執(zhí)行死循環(huán), 阻塞等待請求隊(duì)列。 xUtils是開啟線程池來管理線程。緩存失效策略, volley的所有網(wǎng)絡(luò)數(shù)據(jù)支持從http響應(yīng)頭中控制是否緩存和讀取緩存失效時(shí)間,每個(gè)請求可以控制是否緩存和緩存失效時(shí)間。 Xutils網(wǎng)絡(luò)數(shù)據(jù)請求是統(tǒng)一自定義緩存失效時(shí)間。

      掌握Activity 的生命周期(Lifecycle) Activity的生命周期(Lifecycle)在用戶與App進(jìn)行交互,開啟APP,退出APP,按Home鍵回到桌面等等的時(shí)候,相關(guān)的Activity實(shí)例將會不斷的切換Activity生命周期中

      android開發(fā)之單點(diǎn)觸摸 相對于多點(diǎn)觸摸,單點(diǎn)觸摸還是很簡單的。新建一個(gè)工程,先看看布局文件:RelativeLayoutxmlns:android="

      Android 添加數(shù)據(jù)到本地Excel表中 由于項(xiàng)目需要,今天學(xué)習(xí)了一下如何將程序里的數(shù)據(jù)添加到本地的Excel表中。下面為學(xué)習(xí)筆記:先上效果圖:首先,需要導(dǎo)入jxl.jar包到libs文件夾內(nèi)。然后

      標(biāo)簽: 開源項(xiàng)目怎么做

      本文鏈接地址:http://esstyw.cn/biancheng/382243.html 轉(zhuǎn)載請保留說明!

      上一篇:Android屬性動畫完全解析(上),初識屬性動畫的基本用法(android 屬性動畫原理)

      下一篇:掌握Activity 的生命周期(Lifecycle)(activity的作用和生命周期)

    2. 車船稅計(jì)入管理費(fèi)用什么明細(xì)
    3. 出口退稅申報(bào)系統(tǒng)安裝路徑
    4. 全年沒有超過起征點(diǎn)需要匯算嗎
    5. 進(jìn)項(xiàng)抵扣聯(lián)丟了怎么辦
    6. 個(gè)人所得稅當(dāng)月計(jì)提下月申報(bào)
    7. 工程 開辦費(fèi)
    8. 待攤費(fèi)用可以轉(zhuǎn)入固定資產(chǎn)嗎
    9. 中小企業(yè)對應(yīng)的是
    10. 辦理會員卡套路消費(fèi)
    11. 每月增值稅怎么做賬
    12. 銀行屬于個(gè)人嗎
    13. 公司買車可以抵什么稅
    14. 公司給員工的商業(yè)保險(xiǎn)
    15. 開給學(xué)校的發(fā)票要稅號嗎
    16. 收到上級補(bǔ)助收入支出時(shí)財(cái)務(wù)會計(jì)怎么記賬
    17. 行政罰款計(jì)入什么會計(jì)科目
    18. 壞賬準(zhǔn)備的計(jì)提應(yīng)當(dāng)關(guān)注
    19. 建筑工地伙食費(fèi)會計(jì)分錄
    20. 銷售商品結(jié)轉(zhuǎn)成本會計(jì)分錄
    21. macbookpro磁盤需要分區(qū)嗎
    22. 先扣社保再發(fā)工資可以嗎
    23. 申報(bào)補(bǔ)貼項(xiàng)目 審計(jì)
    24. 鼠標(biāo)燈亮但是鼠標(biāo)失靈
    25. 電腦運(yùn)行時(shí)cpu溫度
    26. php實(shí)現(xiàn)上傳圖片到數(shù)據(jù)庫
    27. c 盤清理
    28. 不動產(chǎn)在建工程領(lǐng)用原材料的分錄
    29. php生成html
    30. php零基礎(chǔ)教程
    31. 貸款支付的本息如何記賬
    32. 退回已修改是什么意思
    33. 若依管理系統(tǒng)前端代碼分析
    34. 詳解php字符串替換
    35. php操作mysql數(shù)據(jù)庫(增刪改查)
    36. 繳納以前年度房產(chǎn)稅會計(jì)分錄
    37. 報(bào)銷差旅費(fèi)的會計(jì)分錄為什么是其他應(yīng)收款
    38. 收到境外服務(wù)費(fèi)可以退稅嗎
    39. 個(gè)體工商戶的酒店增值稅率是多少
    40. 營業(yè)稅差額計(jì)稅
    41. 賬面價(jià)值是歷史價(jià)值嗎
    42. 織夢安裝詳細(xì)教程
    43. php7安裝mysqli擴(kuò)展
    44. python的爬蟲
    45. 所有者權(quán)益包括哪些會計(jì)科目
    46. 買車哪些費(fèi)用可以計(jì)入固定資產(chǎn)
    47. 締約過失是什么行為
    48. 商務(wù)報(bào)銷標(biāo)準(zhǔn)
    49. 進(jìn)口關(guān)稅征收方法
    50. 公司的房租發(fā)票怎么記賬
    51. 工業(yè)用電交稅怎么算
    52. 上月計(jì)提少了怎么辦
    53. 擔(dān)保公司的擔(dān)保費(fèi)能退嗎
    54. 一般納稅人外購貨物發(fā)生非正常損失,不包括
    55. 先收發(fā)票后付款怎么做分錄
    56. 工程施工借貸方向
    57. 本期應(yīng)征增值稅銷售額是什么意思
    58. 企業(yè)產(chǎn)值什么意思
    59. 房地產(chǎn)開發(fā)企業(yè)土地增值稅怎么計(jì)算
    60. 施工圖審查費(fèi)計(jì)算公式
    61. 營業(yè)執(zhí)照代辦需要什么手續(xù)
    62. MySQL數(shù)據(jù)庫遠(yuǎn)程登錄
    63. SQL Server 2008 到底需要使用哪些端口?
    64. ubuntu zmq
    65. centos更新yum update
    66. 沒有系統(tǒng)盤怎么修復(fù)系統(tǒng)
    67. win10系統(tǒng)出現(xiàn)藍(lán)色框框
    68. 電腦操作系統(tǒng)win8
    69. windows7打不了字怎么辦
    70. perl運(yùn)行環(huán)境
    71. jquery添加圖片
    72. 使用Meteor配合Node.js編寫實(shí)時(shí)聊天應(yīng)用的范例
    73. 通過制作潛望鏡活動,你獲得哪些寶貴的經(jīng)驗(yàn)
    74. python爬蟲抓包
    75. unity3d怎么讓物體依次運(yùn)動
    76. js如何實(shí)現(xiàn)圖片懶加載
    77. 稅控盤抄報(bào)反寫工作難度
    78. 慧算賬財(cái)務(wù)公司簡介
    79. 廣東省外經(jīng)貿(mào)廳官網(wǎng)
    80. 申報(bào)的銷項(xiàng)稅額怎么計(jì)算
    81. 河北稅務(wù)怎么打不開網(wǎng)頁
    82. 免責(zé)聲明:網(wǎng)站部分圖片文字素材來源于網(wǎng)絡(luò),如有侵權(quán),請及時(shí)告知,我們會第一時(shí)間刪除,謝謝! 郵箱:opceo@qq.com

      鄂ICP備2023003026號

      網(wǎng)站地圖: 企業(yè)信息 工商信息 財(cái)稅知識 網(wǎng)絡(luò)常識 編程技術(shù)

      友情鏈接: 武漢網(wǎng)站建設(shè)