我常用的BaseActivity
来源:互联网 发布:淘宝怎么发货到台湾 编辑:程序博客网 时间:2024/05/20 18:01
在Android开发过程中,我们经常常用BaseActivity,常在BaseActivity中定义全局的方法,执行适用于所有Activity的操作(统计信息,释放内存等)以及一些其他功能。
在码一个Activity的onCreate过程中,我们要init一些view,设置事件、内容、执行线程等,我们可以选择创建若干个方法,然后在onCreate方法中按照顺序调用那些方法,分别执行init,config等操作。
后来我在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添加到一个列表中,在avtivity的onDestroy方法里进行回收。
具体实现。
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
- 我常用的BaseActivity
- 开发中常用的BaseActivity基类
- 直接拿来用,BaseActivity的常用功能的抽取
- 关于BaseActivity的用法
- BaseActivity的应用
- BaseActivity的重要性
- 定制自己的BaseActivity
- 自定义的BaseActivity
- 带ToolBar的BaseActivity
- BaseActivity的作用
- Android 的BaseActivity
- 一个BaseActivity的诞生
- BaseActivity的简单封装
- 打造简单的BaseActivity
- 简单的BaseActivity
- BaseActivity的基类
- BaseActivity的作用
- baseActivity
- 查看页面加载时间
- C学习笔记(三) 数据类型分类及类型转换
- 网络编程基础
- Eclipse中背景颜色(护眼)及字体设置
- hdu 2091 空心三角形
- 我常用的BaseActivity
- android自定义View二(View的种类)
- margin:0 auto 表示什么意思??
- Arraycopy用法
- C语言标准
- centos下彻底删除重装mysql
- C语言入门(一)初识C
- THINKPHP文件上传方法
- linux终端文件名颜色问题(文件夹具有可执行文件颜色之类的问题)