我常用的BaseActivity

Android开发过程中,我们经常常用BaseActivity,常在BaseActivity中定义全局的方法,执行适用于所有Activity的操作(统计信息,释放内存等)以及一些其他功能。

 

在码一个ActivityonCreate过程中,我们要init一些view,设置事件、内容、执行线程等,我们可以选择创建若干个方法,然后在onCreate方法中按照顺序调用那些方法,分别执行initconfig等操作。

 

后来我在tataufo工作过程中学到一种方式,很简单,很实用:

1.定义public abstract class BaseAcitivity extends Activity

2.定义若干abstract方法,例如:

protected abstract void initContentView();
protected abstract void initView();
protected abstract void initData();
protected abstract void configView();

3.重写onCreate方法,

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.initContentView();
        this.initView();
        this.initData();
        if ( !configViewLater) {
            this.configView();
        }
    }

另外,因为有些activity中可能会大量使用Bitmap,为避免Bitmap未回收,造成内存泄漏,我定义个一个addBitmapToRecycle方法,该方法把需要回收的bitmap添加到一个列表中,在avtivityonDestroy方法里进行回收。

 

具体实现。

public abstract class BaseAppCompatActivity extends AppCompatActivity {
    /**
     * !!! 如果在 configview之前 设置该字段为true,则不会自动执行configView !!!
     */
    protected boolean configViewLater = false;
    protected int colorId = R.color.main_color;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.initContentView();
        this.initView();
        this.initData();
        if ( !configViewLater) {
            this.configView();
        }

        try {
            Window window = this.getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

            ViewGroup mContentView = (ViewGroup) this.findViewById(Window.ID_ANDROID_CONTENT);
            int statusBarHeight = getStatusBarHeight(this);
            int statusColor = getResources().getColor(colorId);

            View mTopView = mContentView.getChildAt(0);
            if (mTopView != null && mTopView.getLayoutParams() != null && mTopView.getLayoutParams().height == statusBarHeight) {
                //避免重复添加 View
                mTopView.setBackgroundColor(statusColor);
                return;
            }
            //使 ChildView 预留空间
            if (mTopView != null) {
                ViewCompat.setFitsSystemWindows(mTopView, true);
            }

            //添加假 View
            mTopView = new View(this);
            ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight);
            mTopView.setBackgroundColor(statusColor);
            mContentView.addView(mTopView, 0, lp);
        } catch (Exception e){
            logD("StatusBar","set color error : " + e.toString());
        }
    }

    private List<Bitmap> bitmaps = new ArrayList<>();

    /**
     * 在这里 setContentView
     */
    protected abstract void initContentView();

    /**
     * 在这里初始化需要的view
     */
    protected abstract void initView();

    /**
     * 在这里接收上页面的data或者从本地读取需要的data
     */
    protected abstract void initData();

    /**
     * 在这里设置监听器或者适配器等
     */
    protected abstract void configView();

    /**
     * Constant.DEBUG 时才会输出log
     * @param key
     * @param content
     */
    public void logD(String key, String content){
        if (Constant.DEBUG){
            Log.d(key, content);
        }
    }

    /**
     * 获取状态栏高度
     * @param context
     * @return
     */
    public static int getStatusBarHeight(Context context) {
        int result = 0;
        int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen",
                "android");
        if (resourceId > 0) {
            result = context.getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }

//    public void sendToast(String content){
//        Toast.makeText(getBaseContext(), content, Toast.LENGTH_SHORT).show();
//        Snackbar.make(getWindow().getDecorView().findViewById(android.R.id.content), content, Snackbar.LENGTH_SHORT).show();
//    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    public void addBitmapToRecycle(Bitmap bitmap){
        bitmaps.add(bitmap);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        for(int i = 0; i < bitmaps.size(); i ++){
            Bitmap bitmap = bitmaps.get(i);
            if (bitmap != null && !bitmap.isRecycled()){
                bitmap.recycle();
            }
        }
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值