网上有不少介绍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的生命周期,若是出了问题立刻就能够清楚的知道是哪里出了问题。