Android:从零开始打造自己的深度链接库(一):ARouter简介
前言
原計劃這是一個系列的收費文章,2塊錢買不了吃虧買不了上當,結果沒想到預訂人數(shù)還沒到10人,略微有些尷尬。雖然結局不太完美,但是也反映出大家的水平大部分都在這篇文章的水平之上了,我也可以把文章拆分成多個部分慢慢寫了,也是好事一件。
在應用開發(fā)中,原生app經常內嵌Web,節(jié)省開發(fā)的成本,這種情況我們通過注入JS腳本來解決原生和Web的通信問題。那么相反,在瀏覽器環(huán)境中,Web又如何啟動App呢?這就是深度鏈接的出現(xiàn)的原因。
深度鏈接看著是一個很6的名字,實際上就是隱式啟動的一種,所以說有文化就是不一樣。隱式啟動最大的優(yōu)勢在于不明確指定啟動頁面的名字,通過各種過濾參數(shù),找到符合條件頁面,對匹配的過程解耦,堪稱路由模式的鼻祖。
我們談談什么是路由模式?
以生活中路由器為例,首先路由器連接可以訪問網絡的總線,我們通過網線或wifi連接路由器,當我們需要訪問網絡的時候,路由器幫助我們進行請求轉發(fā),訪問網絡有兩種情況:
1、例如看視頻,聊天等等,訪問的是總線;
2、如果我們要打局域網游戲,就要訪問連接同一路由的其他設備;
那么把這種設計理念放入到程序設計中:
總線 相當于主工程
設備 相當于獨立模塊
再說說程序設計模塊化的幾大好處:
1、便于多人協(xié)作開發(fā),盡量避免多人操作同一文件,減少合并代碼的引發(fā)的問題。
2、便于測試,減少打包測試的時間
3、便于維護,修改某一功能盡可能小的影響其他模塊。
模塊化有這么多的好處,但同時出現(xiàn)了一個更大的問題:
模塊之間如何進行交互?
例如,用戶登錄和評論兩個獨立模塊,評論之前需要判斷是否已登錄,否則要跳轉到登錄頁面去,評論模塊無法直接訪問用戶模塊的類,所以無法正常編譯運行,為了解決這個問題,我們需要借助路由模式。
OK,基本知識我們已經都了解了,接下來我們學習一下ARouter的用法,看看他怎么把路由和深度鏈接結合起來的。
正文
ARouter路由github地址
首先推薦大家看一下ARouter在github上的教程,英文版和中文版都有,可以說是非常良心了,這里我們挑幾個重點介紹一下。
@Router注解
服務注解,用于Activity,Fragment,以及自定義服務接口等等。
@Router注解的類,代表可以被路由的服務,例如跳轉頁面,啟動服務,或者開放服務,例如之前舉例的登錄,就可以寫一個LoginService,然后通過路由地址就可以找到這個服務。
// 跳轉頁面 @Route(path = "/main/TestActivity", extras = 1) public class TestActivity extends AppCompatActivity{} ARouter.getInstance().build("/main/TestActivity").navigation();// 通過路由找到Fragment @Route(path = "/test/fragment", extras = 1) public class Fragment1 extends Fragment{} Fragment fragment = (Fragment) ARouter.getInstance().build("/test/fragment").navigation();// 通過路由找到開放的服務 @Route(path = "/service/sayHello") public class HelloServiceImpl implements HelloService{} HelloService service4 = (HelloService)ARouter.getInstance().build("/service/sayHello").navigation();@Interceptor注解
全局攔截器注解,會在編譯過程中自動裝配到ARouter配置中,無需手動設置
攔截器會在路由過程中被執(zhí)行,一旦某一個攔截器攔截,此次路由停止。如果跳轉的過程想要跳過攔截器,可以設置greenChannel():
// greenChannel()表示跳過攔截器 ARouter.getInstance().build("/main/TestActivity").greenChannel().navigation();@Autowired注解
自動裝配注解,自動裝配符合要求的值,例如從intent中或者通過路由創(chuàng)建對應的對象。
ARouter.getInstance().build("/kotlin/test").withString("name", "老王").withInt("age", 23).navigation();// 自動裝配,desc屬性表示的描述,沒有實際作用 @Autowired(desc = "姓名") String name = "jack";@Autowired int age = 10;// 自動裝配符合條件的服務 // 如果有多個實現(xiàn)類,請設置路由地址 // @Autowired(name = "/service/sayHello") @Autowired HelloService helloService;SchemeFilterActivity的使用
深度鏈接過度頁面,用于處理從瀏覽器跳轉的參數(shù),然后通過路由找到對應的服務。
SchemeFilterActivity需要在Manifest.xml中注冊,這和我們之前了解的深度鏈接完全一樣,得到了地址后,交給ARouter處理,這樣深度鏈接就和路由完美結合在一起使用。
<activity android:name=".activity.SchameFilterActivity"><!-- Schame --><intent-filter><dataandroid:host="m.aliyun.com"android:scheme="arouter"/><action android:name="android.intent.action.VIEW"/><category android:name="android.intent.category.DEFAULT"/><category android:name="android.intent.category.BROWSABLE"/></intent-filter> </activity>public class SchemeFilterActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_schame_filter);Uri uri = getIntent().getData();ARouter.getInstance().build(uri).navigation();finish();} }總結
這一篇主要是了解一些路由和深度鏈接相關的知識,然后了解一下ARouter的用法,為之后的源碼分析和實戰(zhàn)打下基礎。
下一篇:ARouter源分析,馬上就來。
如果你突然覺得這個系列值兩塊錢,歡迎到簡書打賞一下
總結
以上是生活随笔為你收集整理的Android:从零开始打造自己的深度链接库(一):ARouter简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 玩客云 N1路由 各种盒子 s805 s
- 下一篇: android qq 功能,Androi