我对androidannotations库的看法
来源:互联网 发布:java调用webapi接口 编辑:程序博客网 时间:2024/06/06 06:40
最近才发现项目的代码中方法数已经有6万多,很吃惊,觉得项目貌似没有那么大,怎么会有那么多的代码量。但是我马上就想到了项目中用了androidannotation库,他会在编译时生成很多的代码。
其实我本人特别讨厌使用这个库,虽然他没用反射,在编译时生成的代码,对效率也许没什么影响,并且感觉少些了一些findViewById,传参数啊,启动Activity啊之类代码。但是,我特别特别讨厌类后面还要加个_ !!!特别特别讨厌在项目中写带_后缀的类 这样看代码时,来回点很麻烦!!!并且如果有关androidannotation的代码写错了,根本找不到错误的地方,stuido会提示所有的带后缀的文件找不到了!!!并且现在如果要在项目中去掉这个库,改动量非常多,就像豆腐里混进了沙子,上了贼船就下不来了。特别讨厌这样被捆绑的感觉。
下面就来详细的分析一下,代码中方法数是怎么变多的。
android studio新建一个项目,MainActivity是这样子的
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }}
然后看一下dex中的方法数为16846
再建一个项目,在gradle中添加androidannotation依赖,MainActivity改为下面这样,其他的不变
@EActivity(R.layout.activity_main)public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); }}
这时dex中的方法数为17258 方法多了412
方法并没多多少,基本上是androidannotation jar包中多出的方法
所以我反编译了一下项目
空项目的时候,目录是这样的
而用了androidannotation时,目录是这样的
他会在再自动生成一个ManActivity_.java
并且这个类代码还是很多的
public final class MainActivity_extends MainActivityimplements HasViews{ private final OnViewChangedNotifier onViewChangedNotifier_ = new OnViewChangedNotifier(); @Override public void onCreate(Bundle savedInstanceState) { OnViewChangedNotifier previousNotifier = OnViewChangedNotifier.replaceNotifier(onViewChangedNotifier_); init_(savedInstanceState); super.onCreate(savedInstanceState); OnViewChangedNotifier.replaceNotifier(previousNotifier); setContentView(layout.activity_main); } private void init_(Bundle savedInstanceState) { } @Override public void setContentView(int layoutResID) { super.setContentView(layoutResID); onViewChangedNotifier_.notifyViewChanged(this); } @Override public void setContentView(View view, LayoutParams params) { super.setContentView(view, params); onViewChangedNotifier_.notifyViewChanged(this); } @Override public void setContentView(View view) { super.setContentView(view); onViewChangedNotifier_.notifyViewChanged(this); } public static MainActivity_.IntentBuilder_ intent(Context context) { return new MainActivity_.IntentBuilder_(context); } public static MainActivity_.IntentBuilder_ intent(android.app.Fragment fragment) { return new MainActivity_.IntentBuilder_(fragment); } public static MainActivity_.IntentBuilder_ intent(android.support.v4.app.Fragment supportFragment) { return new MainActivity_.IntentBuilder_(supportFragment); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (((SdkVersionHelper.getSdkInt()< 5)&&(keyCode == KeyEvent.KEYCODE_BACK))&&(event.getRepeatCount() == 0)) { onBackPressed(); } return super.onKeyDown(keyCode, event); } public static class IntentBuilder_ { private Context context_; private final Intent intent_; private android.app.Fragment fragment_; private android.support.v4.app.Fragment fragmentSupport_; public IntentBuilder_(Context context) { context_ = context; intent_ = new Intent(context, MainActivity_.class); } public IntentBuilder_(android.app.Fragment fragment) { fragment_ = fragment; context_ = fragment.getActivity(); intent_ = new Intent(context_, MainActivity_.class); } public IntentBuilder_(android.support.v4.app.Fragment fragment) { fragmentSupport_ = fragment; context_ = fragment.getActivity(); intent_ = new Intent(context_, MainActivity_.class); } public Intent get() { return intent_; } public MainActivity_.IntentBuilder_ flags(int flags) { intent_.setFlags(flags); return this; } public void start() { context_.startActivity(intent_); } public void startForResult(int requestCode) { if (fragmentSupport_!= null) { fragmentSupport_.startActivityForResult(intent_, requestCode); } else { if (fragment_!= null) { fragment_.startActivityForResult(intent_, requestCode); } else { if (context_ instanceof Activity) { ((Activity) context_).startActivityForResult(intent_, requestCode); } else { context_.startActivity(intent_); } } } } }}
这样Activity,Fragment等都会多生成一套代码,随着页面数量的增加,就会导致dex中的类多了很多。
最后,对新开发项目的小伙伴们的建议,不要用androidannotations库,不要用androidannotations库,不要用androidannotations库。当然听不听随你。
- 我对androidannotations库的看法
- 我对游戏UI库的看法
- 我对专利的看法
- 我对Linux的看法
- 我对中国资本市场的看法
- 我对Hibernate的看法
- 我对csdn的看法
- 我对编程的看法
- 我对职业学校的看法
- 我对this的看法
- 我对团队精神的看法
- 我对信仰的看法
- 我对MS的理想化的看法。。
- 我对行政法的理论基础的看法
- 我对文档的一些看法
- 我对虚拟内存的一点看法
- 我对大学教育的看法!
- 我对管理信息系统的一点看法
- iOS开发拓展篇—音频处理(音乐播放器5)
- Node.Js cheerio模块简单API
- 虚继承与对象内存大小
- 【HDU5074】Hatsune Miku(简单DP)
- Codevs 1358 棋盘游戏
- 我对androidannotations库的看法
- 深入理解JS的构造函数
- Astah绘制UML图形-入门篇
- redis简介、安装与启动,开机自启
- Linux进程间通信——使用共享内存
- 制作系统自启动脚本
- 心情 - 201608
- vector的erase()函数分析
- 几种进程间的通信方式