android應用框架搭建------BaseActivity

網上有不少介紹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的生命週期,若是出了問題立刻就能夠清楚的知道是哪裏出了問題。

相關文章
相關標籤/搜索