日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Android3个页面跳转代码,从零开始Android组件化改造(三) - 页面跳转与路由组件...

發(fā)布時間:2025/3/19 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android3个页面跳转代码,从零开始Android组件化改造(三) - 页面跳转与路由组件... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

組件化與傳統(tǒng)開發(fā)有一個很大的不同,就是模塊件的跳轉,如果使用傳統(tǒng)的顯式跳轉,勢必會極大造成模塊之間的耦合,這在組件化的開發(fā)中是絕對不允許的,因此在組件化開發(fā)中我們必須選用隱式跳轉,并且我們需要把所有的頁面都納入到路由管理之中,我們選用的路由組件是阿里巴巴的Arouter,有關Arouter可以查看以下三個資料。

組件化工程中使用

我們在組件化開發(fā)中主要使用到Arouter的三個常用功能。

頁面的跨模塊隱式跳轉

服務的跨模塊調用

頁面的攔截服務

頁面的降級處理

1.頁面的隱式跳轉

RouterHub

在組件化開發(fā)中,我們使用類似Web中Url的方式進行頁面之間的跳轉,Arouter將會把你的第一層路徑作為你的Group名,所以在組件化開發(fā)中,我們將模塊名作為Group的名稱,并且保證每一個模塊的名字是不一樣的,建議每個模塊以自己的模塊名作為Group名,因為Arouter會在編譯階段生成ARouter$$Group$GroupName.java的文件,所以假如在兩個模塊中相同GroupName,程序就會報錯,同時為了路由的初始化不引導到系統(tǒng)的性能,一個Group內不應該包含過多的頁面,Arouter是分批加載的。我們可以在通用的資源目錄下建立RounterHub來進行路徑的分組管理。Arouter的功能非常強大,它不僅可以給Activity添加路由,還可以給Fragment,Service也添加路由,統(tǒng)一添加到路由后,我們就可以把所有頁面納入路由的統(tǒng)一管理,我們可以通過IOC,AOP的思想,在跳轉之前和之后進行操作。創(chuàng)建頁面的方法如下,我們可以傳入必要的參數(shù)。

ARouter.getInstance().build(RouterHub.NEWS_LIST_ACTIVITY)

.withString(CommonKey.TITLE, data.getName())

.withInt(CommonKey.ID, data.getId())

.navigation());

通過使用AOP,我們業(yè)務模塊之間頁面的跳轉就不需要互相引用,因為Arouter已經幫我們處理好了一切,我們只需要最終在APP模塊中引入所有需要的模塊即可。

2.服務的遠程調用

CommonService

這里的Service的含義不是安卓中的Service,而是和服務端開發(fā)中的Service是類似。在組件化開發(fā)中,我們必須要養(yǎng)成一個良好的習慣——對接口進行編程,對接口進行編程可以增強程序的可擴展性。在組件化開發(fā)中,我們可以建立了CommonService的模塊,我們將各個模塊的服務接口以及服務中需要對外暴露的數(shù)據(jù)結構注冊在其中,具體的服務實現(xiàn)我們在服務的提供者中去實現(xiàn),一個服務可以有多個實現(xiàn),在調用的模塊中,我們只需要調用接口即可。代碼如下,我們可以通過調整Name的不同,來切換不同服務的實現(xiàn)。這樣做可以有效減少服務提供者的改動對服務調用者的影響。

使用Arouter中,我們只要接口繼承Arouter中的IProvider即可。

public interface CityServiceService extends IProvider {

}

使用時,我們需要先注入后再使用。

@Autowired(name = RouterHub.WEATHER_SERVICE_SETTING)

WeatherService weatherService;

protected void onCreate(@Nullable Bundle savedInstanceState) {

ARouter.getInstance().inject(this);

}

3.頁面的攔截服務

Arouter中提供了頁面攔截器,攔截器在app中最常用的用法就是登陸鑒權攔截,我們可以建立登陸攔截器。我們只要在攔截器上加入@Interceptor即可啟用攔截器。

在登陸攔截器的場景中,假如我們檢測到用戶沒有登錄,頁面就必須跳轉到登錄界面,但是在模塊化編譯的時候極為不方便,因為這樣我們所調試的模塊就必須引入用戶登陸模塊,這違背我們組件化開發(fā)的初衷。所以我們在登陸攔截器中,假如我們是組件化編譯。那么就使用假的用戶數(shù)據(jù),這個就不需要依賴用戶登錄模塊。當然這個根據(jù)實際場景也可以引入用戶模塊進行調試。

@Interceptor(priority = 5, name = "登錄攔截器")

public class LoginInterceptor implements IInterceptor {

private String[] needLoginPath = {

};

private List path = Arrays.asList(needLoginPath);

@Override

public void process(Postcard postcard, InterceptorCallback callback) {

if (path.contains(postcard.getPath())) {

//TODO 登錄邏輯處理

if (BuildConfig.IS_BUILD_MODULE) {

//TODO 提供假數(shù)據(jù)

}

} else {

//TODO 真數(shù)據(jù)

}

}

}

callback.onContinue(postcard);

}

@Override

public void init(Context context) {

}

}

4.頁面的降級處理

組件化開發(fā)很大的一個便利就是可以方便地插拔模塊,而模塊的插拔勢必會帶來一個問題——頁面的丟失。這個也是我們之前為什么強調必須通過調用Service來進行模塊間的通訊而不是直接引用。但是模塊移出引用,Arouter是無法實例化頁面的,當然這種情況Arouter已經預先幫我們設計了解決方案。只要實現(xiàn)DegradeService接口,既可處理服務降級事件。

// 實現(xiàn)DegradeService接口,并加上一個Path內容任意的注解即可

@Route(path = "/xxx/xxx")

public class DegradeServiceImpl implements DegradeService {

@Override

public void onLost(Context context, Postcard postcard) {

// do something.

}

@Override

public void init(Context context) {

}

}

我們在組件化開發(fā)中,主要就用到了Arouter的這四個主要功能。今天的文章就先寫到這里。之后我們來聊聊有關于生命周期的管理。

總結

以上是生活随笔為你收集整理的Android3个页面跳转代码,从零开始Android组件化改造(三) - 页面跳转与路由组件...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。