Android学习之自定义基类BaseApplication和BaseActivity

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

}

好了,希望对大家有所帮助。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值