简介
先看代码
public static void openActivity(Context context) {
Intent intent=new Intent(context,SecondActivity.class);
context.startActivity(intent);
}
这个静态方法openActivity()写在SecondActivity里面。
第一个Activity 通过第二个Activity 的静态方法openActivity()去打开第二个Activity 。
SecondActivity.openActivity(this);
现在很多人这样写代码了,其实翻看Android 源码的例子就能看到里面也有很多类似的。那么为什么这么写呢。这么写有什么好处呢。如果没有好处大家都不会这么干了。
其实如果只看上面的代码,我可以很负责的告诉你可能真的没啥好处,你可以直接在BaseActivity里面封装openActivity()方法,然后传入想跳转的页面就OK了。我的项目的Base里面都会封装这个方法。
那么为什么这么写呢,这样写最大的好处一般是传参数的时候用最方便,比如我们一般从列表页面跳转到详情页面的时候会传递一个详情页的id 然后通过id获取网络请求。
那么我们代码就应该这样写
private static final String DETAIL_ID = "detail_id";
public static void openActivity(Context context,String detail_id) {
Intent intent=new Intent(context,SecondActivity.class);
intent.putExtra(DETAIL_ID , detail_id);
context.startActivity(intent);
}
这样写跟直接写在调用的第一个Activity 是不同的。
第一个不同就是耦合度降低了,第一个Activity 不需要关心传入的字段是什么,只需要调用方法把内容传过去就好了。
第二个好处就是复用
这个代码可以给无数个Activity 调用,而不是只给一个调用,如果有2个地方需要来这个Activity 那么每个Activity 的代码变的更加简洁
//每个Activity 调用的地方是这样的
SecondActivity.openActivity(this,detail_id);
//而不是
Intent intent=new Intent(context,SecondActivity.class);
intent.putExtra(DETAIL_ID , detail_id);
context.startActivity(intent);
// 看到了,复用的时候是不是更加简洁
这还不够。还有更神奇的地方。
就是如果这个 Activity 因为需求变动需要重新传人一个值,现在变成两个值的时候,我只要在这个方法后面加一个参数就可以,而且如果我之前有调用的地方,就会编译错误。这样就可以很方便的更改避免bug。如果是过去的方式,可能有3个调用的地方,而我只改了两个。那么就会出现出现一个参数异常。不过如果细心一定可能也不会出错,只是这样写,可以避免3个地方参数不一样而在编译期通过的问题。避免部分bug。
网友评论