Activity项目架构之编写自己的BaseActivity

前言

构建一个项目,架构方面我们需要考虑到很多因素。而在这其中,我们频繁接触的activity就是必须要着手的一方面。
在activity中公用的封装起来,对于我们项目的后续开发,会显著提高开发效率,降低成本。

这里,将列举一些常见的场景:

场景1:进公司第一次接手一个项目,项目经理让你修改某个界面相关布局

这个时候我们就需要快速的锁定该界面所对应的activity中的布局文件,可是我们第一次拿到这个项目,相关类并不熟悉,如何找到该activity呢?
最笨的办法,莫过于从AndroidManifest.xml找到入口activity,然后结合界面的跳转顺序,顺藤摸瓜,一步一步,找下去,这样,明显费时费力;即便是对于一个长久接触该项目的开发人员而言,项目中的activity类数量繁多,我们不可能一一记住,总有忘记某个activity对应的类的时候?

如何快速锁定呢?

我们可以编写一个BaseActivity.java,在onCreate()方法中顺便打印出该类的类名,代码如下:

public class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d("BaseActivity", getClass().getSimpleName());
}
}

在我们今后创建的activity都继承自BaseActivity,这样每次创建activity时,都会有打印信息:
这里写图片描述

这样在adt中运用ctrl+shift+r快捷键,快速找到所需类了,减少了不必要的时间成本。

场景2:快速退出程序

如何结合BaseActivity,封装一个任意时间点退出程序的功能?

步骤1:新建一个ActivityCollector类作为活动管理器,代码如下:

public class ActivityCollector {

    public static List<Activity> activities = new ArrayList<Activity>();
    public static void addActivity(Activity activity) {
        activities.add(activity);
    }

    public static void removeActivity(Activity activity) {
        activities.remove(activity);
    }

    public static void finishAll() {
        for (Activity activity : activities) {
            if (!activity.isFinishing()) {
            activity.finish();
            }
        }
}
}

步骤2:BaseActivity.java中代码如下:

public class BaseActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("BaseActivity", getClass().getSimpleName());
        ActivityCollector.addActivity(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollector.removeActivity(this);
    }
}

这样,我们在继承自BaseActivity的某个类中的退出程序的按钮中编写一行代码即可:

    Button button = (Button) findViewById(R.id.button_3);
    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            ActivityCollector.finishAll();
        }
    });

场景3:我们在启动他人编写的activity,往往需要传入某些特定的参数,而我们不知道具体的参数类型?

跳转另一个activity,代码经常会类似于如下形式:

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("param1", "data1");
intent.putExtra("param2", "data2");
startActivity(intent);

对接他人代码,这种情况下,一个是我们自己去阅读需要启动的activity中的代码,二是询问负责编写 SecondActivity
的同事,这样就会很是麻烦!不免又加大了时间的成本。

较好的启动activity的写法如下:

在边写自己的activity时,留下一个启动该activity的接口方法,将所需的参数封装进去,代码如下:

public class SecondActivity extends BaseActivity {

    public static void actionStart(Context context, String data1, String data2) {
        Intent intent = new Intent(context, SecondActivity.class);
        intent.putExtra("param1", data1);
        intent.putExtra("param2", data2);
        context.startActivity(intent);
    }
    ……
}

这样对所需参数就会一目了然,我们在启动这个activity时:

button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    SecondActivity.actionStart(FirstActivity.this, "data1", "data2");
    }
});

养成一个良好的习惯,给你编写的每个活动都添加类似的启动方法,这样不仅可以让启动活动变得非常简单,还可以节省不少你同事过来询问你的时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值