我常用的BaseActivity

来源:互联网 发布:淘宝怎么发货到台湾 编辑:程序博客网 时间:2024/05/20 18:01

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();            }        }    }}




0 0
原创粉丝点击