代码重构
不同的程序员有不同的编写代码的习惯,如果代码繁琐又杂乱,自己开发的话还好,影响自己一个人,如果是团队开发, 提交的代码质量的好坏,关系着整个团队的进度,这时候影响就被放大了。所以在不影响性能的情况下,最好该如何重构下自己的项目的代码呢?
比较出名的31天学习重构资料。参透和理解好就是一个重大进步了。
一、java代码上
现在有这种情况:
Intent intent = new Intent(); intent.setClass(PersonalDetails.this, PersonalINFO.class); startActivity(intent);
这是跳转activity的代码,如果界面少的话,看起来不太繁杂。但是如果有成百上千的activity的话,那么每次跳转都写这么几句话的话,必然会显得繁琐。
不如提取一个公共的类,没当跳转界面时候,都从中获取和调用:
public class ACCOMM{
public static void gotoUserCode(Activity context) { startActivity(context, MyCodeActivity.class); }
public static void gotoChatActivity(Activity context) { Intent intent = new Intent(); intent.setClass(context, ChatActivity.class); context.startActivity(intent); context.overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out); }
public static void gotoCommentActivity(Activity context) {
... } public static void gotoCommon(Activity context, String title) { ... } public static void startActivity(Activity context, Class<?> cls) { ... }
}
在你需要跳转页面的时候,只需要每次传给公共类里边一个要跳转到的context即可,
//设置按钮点击事件
@OnClick(R.id.txt_setting)
public void setting_Click() {
ACCOM.gotoSettingActivity(getActivity());
}
如此一来,每个点击事件处,就再也不用每次都写Intent了。
---沿着这个思路,可以看到上边代码有 @OnClick 这个字样,熟悉点的人都知道,这是用到了JakeWharton
的butterknife的第三方注解库,这个库可以为我们省下很多的无脑代码输入的时间,跟能简化代码,提高我们思考其他核心代码的时间。
此库可以简化诸如findviewbyId和setonclicklienster的代码,再也不必每次都一行一行的写了,使用@bind注解取代获取Id等不少功能,
所以说重构代码此库必不可少,至于一些人担心的使用此库会不会造成很大的性能隐患的问题,根据我的查阅,对于个人应用来讲几乎是无影响的。
butterknife简单入门:
@Bind(R.id.txt_title)
TextView txt_title;
如上代码取代了 txt_title=(TextView)findviewById(R.id.txt_title);
绑定资源到类成员上可以使用@BindBool
、@BindColor
、@BindDimen
、@BindDrawable
、@BindInt
、@BindString
对应注解传入对应的r.string.id
@BindString(R.string.title) String title;
@BindDrawable(R.drawable.graphic) Drawable graphic;
@BindColor(R.color.red) int red; // int or ColorStateList field
@BindDimen(R.dimen.spacer) Float spacer; // int (for pixel size) or float (for exact value) field
除了在activity上使用绑定外,还可以用于fragment,
public class FancyFragment extends Fragment {
@Bind(R.id.button1) Button button1;
@Bind(R.id.button2) Button button2;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fancy_fragment, container, false);
ButterKnife.bind(this, view);
// TODO Use fields...
return view;
}
}
关于如何使用安装可以去到:
https://github.com/JakeWharton/butterknife观看开发文档
具体的使用参考官方使用链接:
http://jakewharton.github.io/butterknife/
二、xml上
开始学习安卓的人,一定是这么布局的
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textAlignment="center"
android:textColor="#e0e0e0e"
android:textSize="12sp"
android:textStyle="bold" />
一个控件有什么属性也都直接用上了,如果一个界面里边有很多控件,那草草一篇这样的带参数的属性,
看起来也是不好看,更何况影响了。再看改成如下:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
style="@style/my_textview_style" />
<style name="my_textview_style">
<item name="android:textAlignment">center</item>
<item name="android:textColor">#f00ff0</item>
<item name="android:textSize">18sp</item>
<item name="android:textStyle">bold</item>
</style>
这样写入一个style,就不用再布局界面显示那么多的内容了。这里在as中有个很快捷的方法,可以直接在之前写好的
代码里右键选择style,然后就可以选择需要吧那些属性放入@style中。很简便。
具体的androidstudio重构代码的方法,可以参考网上总结。
更多关于重构的网络详尽参考资料:
http://blog.sina.com.cn/s/blog_414e587f0102v7b1.html
http://blog.youkuaiyun.com/guijiaoba/article/details/50608606
关于如何使用安装可以去到:https://github.com/JakeWharton/butterknife观看开发文档
具体的使用参考官方使用链接:
http://jakewharton.github.io/butterknife/