开启 Activity 最佳实践

这次要说的是一个很简单但是很有用的小技巧,不知道偶然看到文章的各位是不是都已经知道了。已经知道的就可以略过了。

一般的我开启一个新的 activity 的时候都是直接 new 一个 intent ,然后放入需要的参数,再 startActivity 或者 startActivityForResult 。这样写当然没问题,不管是从语法上还是规范上。而且在一个人开发整个模块的时候,完全感觉不到任何的问题。但是如果在与人做对接的时候,就不那么方便了。比如开启的目标 Activity 并不是你开发的,而是别人开发的,那么你怎么知道必须传入哪些参数的?你可以看源码,也可以取问这个页面的开发者,都可以。但是还是很麻烦,如果目标 Activity 比较庞大,可能要看很久源码才能知道必须传入哪些参数,问人的话中间的沟通成本不知道是多少。但如果目标页面暴露出一个静态方法:

1
2
3
4
5
6
public static void actionStart(Context context, String dada1, boolean data2) {
Intent intent = new Intent(context, ChatActivity.class);
intent.putExtra("str", dada1);
intent.putExtra("siSingle", data2);
context.startActivity(intent);
}

在目标页面中构建了一个新的 Intent 并组装了各个参数,然后直接开启了目标 Acticity ,通过这个静态方法的参数和参数名就知道需要传入什么值,并且不需要自己再调用了 start 方法了。省略了大量沟通和自己查阅的时间,还简化了自己的代码,多好的事啊。现在要开启目标页面只需要一行代码:

1
ChatActivity.actionStart(this, "data1", false);

不过一般调用开启 Activity 很多都是会要求返回值的,直接用 context 开启是无法调用 startActivityForResult 这个方法的,因此还可以写一个重载方法:

1
2
3
4
5
6
public static void actionStartForResult(Activity activity, String dada1, boolean data2, int requestCode) {
Intent intent = new Intent(activity, ChatActivity.class);
intent.putExtra("str", dada1);
intent.putExtra("siSingle", data2);
activity.startActivityForResult(intent, requestCode);
}

调用也还是一句代码的事:

1
ChatActivity.actionStartForResult(this, "data1", false,OPEN_CHAT_ACTIVITY);

这个小技巧这里就结束了,其实真的很简单,本来并不需要专门写个文章,大家稍微一说就知道好在哪里,但是为什么还是要写,因为想说说提高团队效率。这个技巧对于独立开发者几乎没什么意义,但是对于团队开发就很重要了。平时我们总说注重团队效率,很有团队合作精神,但具体什么是团队合作精神呢?这个小技巧某种程度上就是团队合作精神。除了完成必须的业务功能,最好能够考虑到与团队其他人员合作的成本,一个应用中几十个页面并不算多,一般也很少由一个人开发完成,通过类似的技巧,可以省却很多团队之间沟通的时间和成本。包括合理的方法名,变量名等,都有助于提高团队开发效率。