999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Kotlin 的記事本App 的開發與實現

2021-07-16 09:23:46李彥龍
科學技術創新 2021年20期
關鍵詞:界面數據庫用戶

李彥龍

(美的智慧生活(上海)科技有限公司,上海 201702)

智能手機已經成為人們工作生活的一個不可缺少的輔助設備,記錄備忘功能的應用也成為了用戶日常使用率很高的一款應用程序,觀察國內手機廠商的系統,都會預裝記錄備忘類應用,比如華為手機“備忘錄”應用,聯想手機的“聯想記事本”,小米手機的“便簽”應用等。另外開放市場上的NearyMe 云筆記,有道云筆記,大姨媽App,寶寶樹孕育APP 等記事本備忘類型的應用都很受用戶的歡迎[1]。智能手機上的記事本相對于傳統的記錄方式可以做到記錄形式的多樣,更加的方便快捷。比如用戶可以通過錄音、視頻、圖片、文字等一種或者多種形式記錄。除此之外記錄的內容還可以通過智能識別的方式,把包含時間點信息的記錄在日歷應用中自動生成提醒,更進一步提高便捷性。本文介紹基于谷歌在2018 年Goole I/O 大會上發布的JetPack組件庫設計開發聯想日歷的過程,為后續其它應用開發提供一套快捷高效的方案和思路。

1 系統開發相關技術

記事本App 基于安卓平臺的應用,使用Kotlin 這一Google官方推薦的語言開發語言,并使用谷歌新推出的Jetpack 組件,實現高效快捷的開發性能穩定的應用。下面介紹使用到的相關技術。

1.1 Kotlin

Kotlin 是一種新型的靜態類型編程語言,它有助于提高工作效率、開發者滿意度和代碼安全性,截止2021 年2 月11 日谷歌商店排名前1000 的應用中已經有60%的采用了Kotlin 語言開發[2]。2019 年Google I/O 更是把Kotlin 定位推薦語言,而且后續的支持組件包都是以Kotlin 為開發語言??梢奊oogle 對Kotlin 語言的重視。Kotlin 語言有以下特點[2]:

兼容java,而且Android Studio 開發工具有一鍵轉換功能,可以將java 語言轉換成Kotlin 語言。

空指針安全。

支持Lamada。

支持擴展。

所以使用Kotlin 語言開發Android 應用可以做到:用更少的代碼更快速的開發出更少空指針異常的應用。

1.2 JetPack

Jetpack 是一個由多個庫組成的套件,可幫助開發者遵循最佳做法,減少樣板代碼并編寫可在各種Android 版本和設備中一致運行的代碼,讓開發者精力集中編寫重要的代碼[3]。它是Google 公司在2018 年Google I/O 大會上推出的一套官方認證的開發系統,包含架構、UI、基礎庫、行為四個方面到目前一共有大約131 個庫[4],使用這些庫可以快速的搭建開發一個穩定的應用,比如接下來介紹本文用到的幾個庫文件。

1.2.1 ViewModel

ViewModel 是JetPack 架構組件中的一個類,它注重生命周期的方式存儲和管理界面相關的數據。相對于Activity 的7 個生命周期來說ViewModel 只有兩個生命周期,它把自己的生命周期和初始化時候傳入的context 綁定,只有在綁定的context生命周期結束時才會銷毀。所以它只有兩個生命周期的回調函數:創建和初始化傳入context 生命周期結束時候的onCleared回調方法。

圖1 Activity 旋轉生命回調函數和綁定的ViewModel 生命周期回調函數的對比[5]

基于上述ViewModel 的特點可見,使用ViewModel 來作為容器管理UI 層依賴Model 層的數據是個便捷的做法,只需要初始化和使用,而不用管理界面的旋轉息屏等特殊場景數據的保存與恢復邏輯了,這樣可以把時間投入到業務邏輯的開發中。

1.2.2 LiveData

LiveData 是一種可觀察的數據存儲器類。與常規的可觀察類不同,LiveData 具有生命周期感知能力,意指它遵循其他應用組件(如Activity、Fragment 或Service)的生命周期。這種感知能力可確保LiveData 僅更新處于活躍生命周期狀態的應用組件觀察者[6]。使用時注冊觀察者Observer,如果LiveData 的實例被通過setValue(T),postValue(T)接口賦值更新數據時候,會回調Observer 的onChanged()接口,一次觸發更新UI。

1.2.3 Room

Room 在SQLite 上提供了一個抽象層,以便在充分利用SQLite 的強大功能的同時,能夠流暢地訪問數據庫[7]。Room 是在SQLite 數據庫的基礎上又做了一層封裝,開發者可以使用注解的方式方便的創建數據庫和定義訪問數據庫的接口,且支持多線程。

1.3 MVVM 架構

上文中我們提到了ViewModel,MVVM (Model-View-ViewModel)的架構就是在之前MVP(Model-View-Presenter)基礎之上把Presenter 替換成ViewModel 形成的新的代碼架構。ViewModel 作為顯示View 和數據存儲的Model 之間的橋梁,一方面可以作為數據的容器,另一方面可以作為業務邏輯的容器,從數據源獲取到的數據在顯示之前做一些處理。

圖2 MVVM 架構圖

2 系統總體功能框架

記事本應用的主要功能有:

2.1 主界面按照添加時間順序由上而下以列表形式顯示,每一個添加項都已卡片的形式展示。每一項有創建時間、標題、文本內容、圖片和語音圖標。其中語音圖標標注時長,并有點擊播放按鈕。

2.2 主界面下部偏右加號按鈕點擊進入添加頁面、添加界面有創建時間、標題輸入框、文本輸入框,下部的按鈕欄中有語音按鈕、圖片按鈕、拍照按鈕。

2.3 主界面列表的每個卡片代表一個記事項,點擊進入編輯界面,此時編輯界面同添加界面,只是多了刪除和分享功能。

2.4 在主界面上長按一個記事項觸發進入ActionMode 也就是多選編輯界面,多以點擊其它卡片選中,再次點擊取消,ActionBar 也就是頂部欄提示當前已選擇項目的數目和刪除按鈕,這個功能便于用戶批量刪除。

由于記事本的功能決定的,它把用戶創建界面生成記事項存入本地數據庫,然后在主界面再進行讀取展示,點擊編輯再次對數據庫中保存的數據進行更新或者刪除。而主界面的多選模式則進行對數據庫中的記錄進行單個或者批量刪除。由此我們可以想到利用MVVM 架構模式,如果把主界面展示的記事項作為一個數據item,那么我們可以把item 的列表作為一個LiveData 放入ViewModel 中,主界面的Activity 只需要觀察item的列表是否更新,觸發更新展示即可。而ViewModel 中可以在對記事項增刪改查操作后,觸發更新ViewModel 中item 列表項即可。至于LiveData 和Model 之間可以使用前面介紹的Room 組件替換SQLite 組件,實現數據庫的創建和接口Dao 的創建。方便業務層ViewModel 對Model 層增刪改查的工作。下圖是經典的基于Jetpack 架構組件的架構圖,本文設計開發的記事本應用由于功能決定的可以參考此經典架構。

圖3 使用JetPack 架構組件的典型架構圖[8]

3 系統數據庫設計與構建

客戶端本地數據庫的構建也比較簡單,一個table 名字為note_table。其中id 為自動生成累加的索引,并設置為primary key。type 取值為枚舉類型的索引,取值范圍0-1,0 代表普通記事項,只有文字內容;1 代表有語音,圖片等內容的記事項;textx用于保存文字內容的字段。image1-image4 存儲用戶選擇的圖片路徑或者拍照后生成的圖片文件的路徑。date 字段用于保存日期對應毫秒。Voicepath 是保存語音文件路徑的字段。Ismedia,用于表示此項記錄是否有多媒體內容,其實不用此字段通過判斷多個圖片字段和voicepath 字段也是可以判別的,用ismedia 字段只是多存儲一個便捷識別多媒體記錄項的標志位。

圖4 數據庫表結構

4 系統主要功能開發與實現

4.1 記事本App 客戶端的開發與實現

記事本App 的應用的實現主要有三個部分,UI 部分、viewmodel 和model 部分,下面分別闡述這三部分的實現以及所用到的技術。

4.1.1 UI/UI controller

UI/UI controller 部分指顯示界面部分的代碼模塊。采用單Activity 多Fragment 的架構設計,這樣設計的好處是便于各個fragment 之間數據的傳遞與共享。MainActivity 作為其它兩個Framgnet 的容器,EditNoteFragment 顯示新建和編輯記事項的界面,NotListFragment 顯示所有記事項的列表。

圖5 UI 部分代碼文件結構圖

4.1.2 viewmodel

對 應 UI 部 分 兩 個 fragment,viewmodel 部 分 有NoteItemViewModel 和NoteListViewModel 兩個文件,其中NoteItemViewModel 中包含有LiveDate<NoteItem>的實例;同時兩個ViewModel 實例也持有Model 層數據庫的實例。

圖6 ViewModel 部分代碼文件結構圖

4.1.3 model

model 部分是指本地存儲數據庫,這部分包含數據庫的創建,管理以及Dao 接口封裝對數據庫增刪改查的實現。Dao 接口根據業務需要封裝了四個功能:(1)查詢所有數據庫中記事項的數據。(2)查詢單個記事項的數據,查詢參數是id,這也是數據表中作為primary key 存儲的字段,保證唯一性。(3)更新接口,參數是NoteItem 實例。(4)刪除單個NoteItem 的接口,參數是id。

這部分的實現由于使用了JetPack 中的Room 組件,所以我們只需要按照Room 組件的樣式創建數據庫存儲數據對應的Bean 文件并使用固定的注解標簽例如:@Entity (tableName =“note_table”)就可以創建對應的數據表。同樣的對Dao 文件也可以通過在Interface 接口定義的文件中使用@Dao 注解和@Insert 和@Query @Update 等標簽就可以實現。舉例:查詢所有數據庫中保存的記事項,可以這樣定義@Query (“SELECT *FROM note_table ORDER BY date DESC”);其中只需要注意note_table 為要查詢的表格的名字即可。

4.2 智能生成提醒功能

這里主要是通過用的正則表達式來匹配用戶創建記事項中的日期內容,如果匹配成功則代表此記事項可以生成對應的提醒,并提示用戶是否插入到日歷的提醒數據庫中,達到定時提醒的功能。比如:8 月15 日體檢這樣的內容。則會提示用戶是否生成一個8 月15 日的提醒,提醒的內容是體檢。如果用戶選擇同意則進入日歷創建提醒的界面讓用戶繼續操作。當然這里所說的智能也只是窮舉日常中用戶輸入的日期格式,并不能做到全覆蓋,這里的正則表達式可以作為一個服務器接口后臺持續維護,動態分發給用戶使用。這樣可以做到用戶反饋匹配錯誤或者不能智能識別日期的問題可以快速的修正和發布,而用戶端則不需要更新應用即可以看到修復后的效果,提升用戶體驗。

4.3 分享功能

用戶有從記事本分享到朋友圈或者微信好友的需求,所以我們接入了微信的sdk 并結合系統的分享功能,通過在分享前重新排版組合生成圖片然后再調用分享接口的方式實現了一鍵分享的功能。

5 結論

記事本App 本身是一個功能相對簡單的應用,它的業務功能決定了界面修改內容存儲到數據庫,顯示時候又從數據庫中讀取這樣的特性,特別適合用JetPack 中的ViewModel 結合LiveDate 的架構組件。所以本文借助記事本App 的設計實現介紹MVVM 的架構和ViewModel,LiveDate 以及Room 架構組件的使用。此經驗可用于開發設計其它App,提升開發效率和架構的合理性,結合Kotlin 語言的使用也能進一步提升開發App 的穩定性。

猜你喜歡
界面數據庫用戶
國企黨委前置研究的“四個界面”
當代陜西(2020年13期)2020-08-24 08:22:02
基于FANUC PICTURE的虛擬軸坐標顯示界面開發方法研究
數據庫
財經(2017年2期)2017-03-10 14:35:35
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
人機交互界面發展趨勢研究
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
數據庫
財經(2016年15期)2016-06-03 07:38:02
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
主站蜘蛛池模板: 日韩欧美高清视频| 青草视频久久| 久久一色本道亚洲| 亚洲无码精品在线播放| 亚洲精品第一在线观看视频| 亚洲成人黄色在线观看| 免费Aⅴ片在线观看蜜芽Tⅴ| 69视频国产| 欧洲免费精品视频在线| 国产成人高清精品免费| 亚洲天堂精品在线观看| 真实国产乱子伦高清| 国产精品手机视频一区二区| 国产va在线| 四虎永久在线| 欧美一级黄片一区2区| 亚欧成人无码AV在线播放| 亚洲免费黄色网| 国产在线无码一区二区三区| 国产精品一老牛影视频| 亚洲精品色AV无码看| 日本高清免费不卡视频| 久久综合色播五月男人的天堂| 午夜福利视频一区| 免费国产高清视频| 国产欧美中文字幕| 亚洲va在线∨a天堂va欧美va| 99精品在线视频观看| 国产日本欧美亚洲精品视| 成人福利在线观看| 久久免费视频6| 欧美在线观看不卡| 激情午夜婷婷| 日本一区中文字幕最新在线| 国产小视频在线高清播放| 波多野结衣视频一区二区| 欧美日韩中文国产| 日韩欧美网址| 91亚洲视频下载| 青草视频久久| 老熟妇喷水一区二区三区| 亚洲人成网站观看在线观看| 亚洲欧美日韩动漫| 天天躁日日躁狠狠躁中文字幕| 国产麻豆精品在线观看| 亚洲成aⅴ人片在线影院八| 2021最新国产精品网站| 亚洲欧美日韩色图| 久久精品丝袜| 毛片基地美国正在播放亚洲| 国产在线观看精品| 国产国产人免费视频成18| 亚洲码一区二区三区| 亚洲国产综合自在线另类| 国产精品毛片一区| 蜜臀av性久久久久蜜臀aⅴ麻豆| 久久毛片网| 欧美亚洲激情| 乱系列中文字幕在线视频 | 国产在线自乱拍播放| 日韩av无码DVD| 91美女视频在线| 亚洲成a人在线观看| 日韩 欧美 国产 精品 综合| 欧美爱爱网| 精品久久蜜桃| 日韩av在线直播| 青草娱乐极品免费视频| 色香蕉影院| 综合亚洲色图| a毛片免费在线观看| 国产成人精品一区二区三在线观看| 毛片在线区| 亚洲国产精品一区二区第一页免| 99中文字幕亚洲一区二区| 欧日韩在线不卡视频| 国产精品自拍露脸视频 | 99国产精品国产高清一区二区| 中文成人在线视频| 欧美高清三区| 狼友视频国产精品首页| 国产精品污视频|