天天看點

安卓基類的書寫-參考鴻洋大神

基類Activity

作者寫了Android産品研發、源碼解析等多個專題,有興趣可以關注學習。本文為産品研發中的一篇。

1 概述   

在實際的android産品研發中,一般的我們在寫Activity的時候都會繼承于一個基類Activity,該Activity是所有的Activity的基類。

在該基類中我們主要用于重寫一些共有的邏輯。好處是顯而易見的對于一些Activity的共有邏輯我們不必要在每個Activity中都重新寫一遍,隻需要在基類Activity中寫一遍就好了。

下面我就講解一下在産品研發過程中我對基類Activity的設計。

  • (一)基類Activity是如何使用的? 

定義一個BaseActivity,讓App中所有的Activity都繼承于BaseActivity;

  • (二)基本Activity包含的内容。

下面将逐一介紹推薦的内容。

2 友盟資料統計邏輯   

在BaseActivity的生命周期中複寫友盟資料統計方法。 

用過友盟資料統計的同學應該知道,為了統計每個頁面的點選事件,頁面通路路徑,異常資訊等我們需要在Activity的生命周期方法中添加友盟的API,這些都是一些相同的邏輯,難道我們需要在每個Activity中都重寫這些友盟API麼?

答案當然是否定的,友盟官方也不建議我們這麼做,我們可以在一個基類Activity的生命周期方法中重寫這些友盟API,并讓我們需要統計的頁面繼承于該基類Activity。

@Override
protected void onResume() {
    MobclickAgent.onResume(this);
}
@Override
protected void onPause() {
    MobclickAgent.onPause(this);
}
           

由于我們需要統計不同的Activity頁面的資料,是以我們需要在各個Activity的生命周期中都要重寫友盟的API,那麼這裡我們就完全可以将這種重複性的動作下發到BaseActivity中,而讓所有的Activity都繼承于BaseActivity,進而我們的Activity就在生命周期方法中重寫了友盟的API。

2 儲存Activity棧   

安卓基類的書寫-參考鴻洋大神

因為我們在Activity頁面中經常需要使用“this”,但是到處都是用this顯得不太好,這時候我們可以在BaseActivity中定義一個Actiivty類型的mContext成員變量并在BaseActivity中的onCreate方法中指派為this,這樣我們在子Activity中需要使用this的地方直接使用mContext成員變量就好了。

并且我們在記憶體中儲存了一個Activity的自定義棧,正常的做法是在Activity的onCreate方法中執行入棧操作,在Activity的onDestory方法中執行出棧操作,由于這些都是共有的邏輯是以我們把這兩個操作放到BaseActivity中。

3 EventBus進行注冊和反注冊   

在生命周期方法中對事件總線架構EventBus進行注冊和反注冊。

使用過EventBus的同學應該知道其能夠實作事件傳遞的核心機制就是将Activity對象“注冊”到EventBus中,但是有注冊也必須要有反注冊的機制,因為Activity不是常駐記憶體的,Activity也有銷毀的時候,這時候就需要從EventBus中“反注冊”,一個比較好的方式就是在Activity聲明周期方法中完成

安卓基類的書寫-參考鴻洋大神

這樣我們就不必要單獨在Activity中重寫EventBus的注冊和反注冊邏輯了。

4 登入使用者票據更新的操作   

在onResume方法中執行更新登入使用者票據更新的操作。

在App端儲存了使用者的token資訊,但是這裡的token資訊不是一直有效的,有效期為30天,是以這裡就需要有一個更新token的操作,App現在的更新操作是判斷token的有效期是否過了一半,即15天,若過了一半了,則在新打開的Activity時執行更新票據操作,是以這也是共有的邏輯,即在BaseActivity的onResume中執行更新票據的操作。

安卓基類的書寫-參考鴻洋大神

5 重寫加載布局檔案的邏輯,統一App頁面布局   

在setContentView方法中,重寫加載布局檔案的邏輯,統一App頁面布局、

安卓基類的書寫-參考鴻洋大神

在BaseActivity中重寫了setContentView方法,然後統一布局檔案,即讓我們調用setContentView傳遞的layoutId加載到我們自定義的ViewContain中,這樣我們就統一了Activity的布局檔案,當然了這也是共有的邏輯,我們可以解除安裝BaseActivity中。

6 執行共有的UI操作   

執行共有的UI操作,比如顯示Toast,顯示SnakeBar,顯示Progress,顯示Dialog等。

安卓基類的書寫-參考鴻洋大神

我們可以在BaseActivity中重寫了一些顯示Toast,Dialog,SnakeBar的操作,這樣我們在Activity中顯示這些UI的時候可以統一調用方法與UI風格。

從上面我們分析的基類内容可以知道一般在涉及Activity的時候都需要重寫一個基類Activity,用于重寫Activity中的共有邏輯,避免我們在每個Activity中都重寫相關的重複邏輯。