


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Android中如何設(shè)計與實現(xiàn)scheme跳轉(zhuǎn)
這篇文章主要為大家展示了Android中如何設(shè)計與實現(xiàn)scheme跳轉(zhuǎn),內(nèi)容簡而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會有收獲的,下面讓在下帶大家一起來看看吧。緣起隨著App的成長,我們難免會遇到以下這些需求:為了解決這些問題,App一般都會自定義一個scheme跳轉(zhuǎn)協(xié)議,多端都實現(xiàn)這個協(xié)議,以此來解決各種運(yùn)營需求。今天就來解析下QMUI最新版QMUISchemeHandler的設(shè)計與實現(xiàn)。一個scheme的格式大概是這樣子:schemeName://action?param1=value1¶m2=value2schemeName://action?param1=value1¶m2=value2例如:qmui://home?tab=2qmui://home?tab=2從技術(shù)角度來講,實現(xiàn)scheme的跳轉(zhuǎn)并不是件很難的事情,就是下面兩個步驟:但是寫代碼時如果不加以設(shè)計,就容易是堆一堆的ifelse。例如:每當(dāng)有新的scheme添加時,就去添加一個if,直到它逐漸變成一段巨長的爛代碼,改都改不動。因而我們要勤思考、多重構(gòu),盡早通過設(shè)計出優(yōu)良的框架來解放自己的雙手。對于ifelse這類的重構(gòu),一個基本的方式就是用查表法,將所有的條件以及其所要執(zhí)行的行為放在一個map里,然后使用時通過去查詢這個map而獲取要執(zhí)行的行為。而我們可以通過注解配合代碼生成的方式構(gòu)建這個map,從而減少我們代碼的編寫量。除此之外,我們還需要考慮各種功能性需求:接口設(shè)計任何一個庫的開發(fā),為了讓業(yè)務(wù)使用方足夠舒心,既要保證庫的功能足夠強(qiáng)大,也要保證使用的方便性,QMUIScheme對外主要是QMUISchemeHandler這個入口類,以及ActivityScheme和FragmentScheme兩個注解。QMUISchemeHandlerQMUISchemeHandler通過Builder模式實例化:大多數(shù)場景,QMUISchemeHandler采用單例模式即可。其可以設(shè)置多個攔截器、設(shè)置fragment、activity的默認(rèn)實例化工廠、以及默認(rèn)的匹配器。實例工廠和匹配器都是提供了默認(rèn)實現(xiàn)的,大多數(shù)場景是不需要調(diào)用者關(guān)心的。而且這里都只是設(shè)置全局默認(rèn)值,到了scheme注解那一層,還可以為每個scheme指定不同的值,以滿足可能的自定義需求。ActivityScheme與FragmentScheme注解這兩個注解是非常相似的,但是因為Fragment有一些更多的配置項,因為獨立出來了??梢钥闯?,我們前面所羅列的各種需求,都在SchemeHandler以及兩個scheme里體現(xiàn)出來了。使用對于業(yè)務(wù)使用者,我們只需要在Activity或者Fragment上加上注解。QMUISchemeHandler默認(rèn)會將參數(shù)解析出來并放到Activity的intent里或者Fragment的arguments里,因而我們可以在onCreate里將我們關(guān)心的值取出來:這種傳值方法很符合Android官方設(shè)計的做法了,這也要求Fragment遵循無參構(gòu)造器的使用方式。對于WebView,我們可以通過重寫WebViewClient#shouldOverrideUrlLoading來處理scheme跳轉(zhuǎn):實現(xiàn)QMUISchemeHandler采用代碼生成的方式,在編譯期生成一個SchemeMapImpl類,其實現(xiàn)了SchemeMap類而每個scheme的注解對應(yīng)一個SchemeItem:在編譯期通過SchemeProcessor生成的SchemeMapImpl大概是這樣子的:整體的設(shè)計以及實現(xiàn)思路就是這樣,剩下的就是各種編碼細(xì)節(jié)了。有興趣的可以通過QMUISchemeHandler#handle()進(jìn)行追蹤下,或者看看SchemeProcessor是如何做代碼生成的。這個功能看上去簡單,其實也包括了Builder模式、責(zé)任鏈模式、工廠方法等設(shè)計模式的運(yùn)用,還有SchemeMatcher、SchemeItem等對面向?qū)ο蟮慕涌凇⒗^承、多態(tài)等的運(yùn)用。讀
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版?zhèn)鶛?quán)轉(zhuǎn)股權(quán)合同
- 二零二五房地產(chǎn)估價委托協(xié)議合同書范文
- 借款居間服務(wù)合同及借款合同二零二五年
- 出租車司機(jī)聘用協(xié)議書二零二五年
- 土地拍賣轉(zhuǎn)讓協(xié)議書
- 公司投資公司合作合同范例二零二五年
- 2025工程項目承包合同(合同范本)
- 2025年版場地租賃合同范本
- 2025商業(yè)貸款質(zhì)押合同
- 吸氧并發(fā)癥及護(hù)理措施
- 膽管癌術(shù)后護(hù)理病例討論
- WMT8-2022二手乘用車出口質(zhì)量要求
- 大學(xué)《思想道德與法治》期末考試復(fù)習(xí)題庫(含答案)
- 欽州市充電站建設(shè)計劃書
- 婚紗行業(yè)基礎(chǔ)知識培訓(xùn)課件
- 智能燈具故障排除方案
- 《少先隊員采茶歌》課件
- 新外研版高一英語必修二unit6課文
- 氣排球比賽積分表
- 20道瑞幸咖啡營運(yùn)經(jīng)理崗位常見面試問題含HR常問問題考察點及參考回答
- 急性心力衰竭中國急診管理指南2022
評論
0/150
提交評論