基類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中都重寫相關的重複邏輯。