Android学习之自定义基类BaseApplication和BaseActivity
来源:互联网 发布:阿里云备案拿手机拍照 编辑:程序博客网 时间:2024/04/30 09:24
Android开发中相信大家一定会使用到许多重复的类似的方法,对于这些重复的工作,我们可以将其提取到一个Util工具类当中来提高开发效率,里面可以写一些static的方法,这个很重要哦。当然也可以直接新建一个基类来提取这些重复的方法,我个人比较偏向于后者,感觉逼格比较高点,呵呵。
BaseApplication:
首先要继承Application,然后AndroidManifest.xml中给<application>加上name属性,就是BaseApplication所在的包名+类名,例如
android:name="xxx.xxx.xxx.BaseApplication"
BaseApplication中我们可以做一些Application层次的工作,例如我们可以在其中退出所有的Activity,这个工作相信是很多APP都具备的功能,另外我们也可以做一些第三方SDK的初始化操作,对于这个我就不写啦,相信大家看各种SDK的文档就知道怎么初始化啦。另外本人对Application其实也不是很了解,所以也写不出什么,只能说把自己知道的写出来。public class BaseApplication extends Application { private ArrayList<Activity> activityList = new ArrayList<>(); /** * 添加到ArrayList<Activity> * * @param activity:Activity */ public void addActivity(Activity activity) { activityList.add(activity); } /** * 退出所有的Activity */ public void finishAllActivity() { for (Activity activity : activityList) { if (!activity.isFinishing()) { activity.finish(); } } }}
BaseActivity:
首先肯定是继承Activity,BaseActivity中我们能做的事情就更多了,主要是一些重复方法的提取,目的就是为了让我们在开发中能更有效率。相信对于findViewById()大家一定都很熟悉并且讨厌了,每次都要强制转换,十分的繁琐,还有就是Activity之间的跳转,使用Intent时也难免避免不了写重复的代码,还有就是Toast和SharedPreferences我们也可以提取。既然是基类,那么子类肯定可以继承它的一些方法,在这里我们可以将基类写成abstract类,在其中再写一些abstract方法供子类来实现,我们可以使用设置布局、初始化一些关键对象、初始化视图、初始化数据的思想来给子类提供一个简单的模版,这样能使自己的代码看起来十分的规范和美观。我们也可以重写一些方法,来实现一些共同的效果,例如onBackPressed()中我们可以给Activity的返回加上动画,至于动画这里就不写啦,网上有很多种。当然以上这些只是本菜鸟的个人想法,大家看看就好,还有许多可以优化和实现的地方,这里就不描述啦。
public abstract class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(); initActivity(); initView(); initData(); } @Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.anim_slide_back_enter, R.anim.anim_slide_back_exit); } /** * 查找组件 * * @param viewId:View的ID * @return View */ @SuppressWarnings("unchecked") protected <view extends View> view getViewById(int viewId) { return (view) findViewById(viewId); } /** * 启动Activity * * @param context:Context * @param cls:Class<?> * @param isFinish:是否关闭Activity */ protected void startActivityByIntent(Context context, Class<?> cls, Boolean isFinish) { startActivity(new Intent(context, cls)); if (isFinish) { finish(); } overridePendingTransition(R.anim.anim_slide_forword_enter, R.anim.anim_slide_forword_exit); } /** * 显示短Toast * * @param context:Context * @param text:String */ protected void showShortToastByString(Context context, String text) { Toast.makeText(context, text, Toast.LENGTH_SHORT).show(); } /** * 显示长Toast * * @param context:Context * @param text:String */ protected void showLongToastByString(Context context, String text) { Toast.makeText(context, text, Toast.LENGTH_LONG).show(); } /** * 设置SharedPreferences * * @param context:Context * @param key:键 * @param value:值 */ protected void setSP(Context context, String key, int value) { SharedPreferences.Editor et = context.getSharedPreferences(Keys.SP_NAME, Context.MODE_PRIVATE).edit(); et.putInt(key, value); et.apply(); } /** * 设置SharedPreferences * * @param context:Context * @param key:键 * @param value:值 */ protected void setSP(Context context, String key, String value) { SharedPreferences.Editor et = context.getSharedPreferences(Keys.SP_NAME, Context.MODE_PRIVATE).edit(); et.putString(key, value); et.apply(); } /** * 设置SharedPreferences * * @param context:Context * @param key:键 * @param value:值 */ protected void setSP(Context context, String key, Boolean value) { SharedPreferences.Editor et = context.getSharedPreferences(Keys.SP_NAME, Context.MODE_PRIVATE).edit(); et.putBoolean(key, value); et.apply(); } /** * 获取SharedPreferences * * @param context:Context * @param key:键 * @param defaultValue:值 * @return 值 */ protected int getSP(Context context, String key, int defaultValue) { SharedPreferences sp = context.getSharedPreferences(Keys.SP_NAME, Context.MODE_PRIVATE); return sp.getInt(key, defaultValue); } /** * 获取SharedPreferences * * @param context:Context * @param key:键 * @param defaultValue:值 * @return 值 */ protected String getSP(Context context, String key, String defaultValue) { SharedPreferences sp = context.getSharedPreferences(Keys.SP_NAME, Context.MODE_PRIVATE); return sp.getString(key, defaultValue); } /** * 获取SharedPreferences * * @param context:Context * @param key:键 * @param defaultValue:值 * @return 值 */ protected boolean getSP(Context context, String key, Boolean defaultValue) { SharedPreferences sp = context.getSharedPreferences(Keys.SP_NAME, Context.MODE_PRIVATE); return sp.getBoolean(key, defaultValue); } /** * 设置布局 */ public abstract void setContentView(); /** * 初始化Activity */ public abstract void initActivity(); /** * 初始化View */ public abstract void initView(); /** * 初始化数据 */ public abstract void initData();}
好了,希望对大家有所帮助。
- Android学习之自定义基类BaseApplication和BaseActivity
- baseactivity和baseapplication
- 安卓开发基类BaseActivity、BaseApplication
- BaseApplication和BaseActivity该怎么写
- android 之 Baseactivity 和BaseFragment
- Android 自定义标题栏BaseActivity
- 自定义BaseActivity和ActivityManager
- Android App框架设计之编写基类BaseActivity
- 自定义基类BaseActivity,节省开发步骤
- Android学习笔记--BaseActivity和BaseFragment的再抽取
- android app 框架之BaseActivity
- 自定义BaseActivity
- 自定义BaseActivity
- 自定义BaseActivity
- 自定义BaseActivity
- 构建android项目的两个重要的基类BaseFragment和BaseActivity
- 编写基类BaseActivity
- BaseActivity基类封装
- R语言中如何选择线性回归模型以及如何降维
- I/O体系结构和设备驱动程序(五)
- iOS textview滚动到底部
- ListView下拉刷新模板方式
- 将图片设置为主界面背景
- Android学习之自定义基类BaseApplication和BaseActivity
- Logback.xml文件配置详解
- Swift UITextView(多行文本控件)
- 创意户外金属便携打火机
- 云计算环境下的大规模图数据处理技术
- 工程打包-另辟蹊径 iOS
- RunLoop运行循环
- 为什么要写技术blog?
- Reducing Compilation Time: Unity Builds