網上有不少介紹BaseActivity的博文,多數是從應用的角度去描述的。java
這裏,我所介紹的BaseActivity不一樣,主要從框架搭建的角度去介紹BaseActivity的使用。android
先看代碼:框架
/** * 應用程序Activity的基類 * * @author kymjs * @version 1.0 * @created 2013-11-24 */ public abstract class BaseActivity extends Activity implements OnClickListener { private static final int ACTIVITY_RESUME = 0; private static final int ACTIVITY_STOP = 1; private static final int ACTIVITY_PAUSE = 2; private static final int ACTIVITY_DESTROY = 3; public int activityState; // 是否容許全屏 private boolean mAllowFullScreen = true; public abstract void initWidget(); public abstract void widgetClick(View v); public void setAllowFullScreen(boolean allowFullScreen) { this.mAllowFullScreen = allowFullScreen; } @Override public void onClick(View v) { widgetClick(v); } /*************************************************************************** * * 打印Activity生命週期 * ***************************************************************************/ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AppLog.debug(this.getClass() + "---------onCreat "); // 豎屏鎖定 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); if (mAllowFullScreen) { requestWindowFeature(Window.FEATURE_NO_TITLE); // 取消標題 } AppManager.getAppManager().addActivity(this); initWidget(); } @Override protected void onStart() { super.onStart(); AppLog.state(this.getClass(), "---------onStart "); } @Override protected void onResume() { super.onResume(); activityState = ACTIVITY_RESUME; AppLog.state(this.getClass(), "---------onResume "); } @Override protected void onStop() { super.onResume(); activityState = ACTIVITY_STOP; AppLog.state(this.getClass(), "---------onStop "); } @Override protected void onPause() { super.onPause(); activityState = ACTIVITY_PAUSE; AppLog.state(this.getClass(), "---------onPause "); } @Override protected void onRestart() { super.onRestart(); AppLog.state(this.getClass(), "---------onRestart "); } @Override protected void onDestroy() { super.onDestroy(); activityState = ACTIVITY_DESTROY; AppLog.state(this.getClass(), "---------onDestroy "); AppManager.getAppManager().finishActivity(this); } }
定義一個初始化Activity控件的抽象方法initWidget();ide
像findviewbyid()這類代碼就能夠寫在這裏,不會影響代碼結構了。這裏須要提一點的是:setContent()方法必定要寫在initWidget()裏,而不能再寫到oncreate裏面了,看代碼能夠知道,initwidget方法是存在於super()中的,而若是再寫到oncreate裏,就至關於先調用了findview再去調用setcontent,這樣確定會報空指針異常。this
關於豎屏鎖定,這個能夠按須要添加,沒什麼說的。debug
還有一個要說的就是requestWindowFeature(Window.FEATURE_NO_TITLE); // 取消標題指針
對於這段代碼,若是你要使用系統的ActionBar的時候,一點要記得調用setAllowFullScreen,設置爲false,不然BaseActivity自動取消了ActionBar你又去使用,確定也會出異常。調試
還有一點:Baseactivity已經實現了OnClickListener,因此子類無需再次實現,控件能夠直接在initWidget裏面setonclicklistener(this);而後在widgetClick(View v)中設置監聽事件便可。code
有關AppManager的內容我將放到下一篇《android應用框架搭建》去講解,這裏你們能夠先忽略。生命週期
有關生命週期的打印,我認爲在調試階段仍是有必要的,畢竟看着每個Activity的生命週期,若是出了問題立刻就能夠清楚的知道是哪裏出了問題。