android开发框架AndroidAnnotations介绍

举报
aiot_bigbear 发表于 2022/09/25 03:31:28 2022/09/25
【摘要】 虽然我一直很反对框架,但是随着自己开发经验的积累越来越多,也对开发框架持开发态度了,因为很多东西都是重复的,开发框架确实能为自己节省很多时间,优秀的开发框架还能教会你很多软件架构方面的知识。下面介绍开源框架AndroidAnnotations。 AndroidAnnotations是一个能够让你快速进行Android开发的开源框架...

虽然我一直很反对框架,但是随着自己开发经验的积累越来越多,也对开发框架持开发态度了,因为很多东西都是重复的,开发框架确实能为自己节省很多时间,优秀的开发框架还能教会你很多软件架构方面的知识。下面介绍开源框架AndroidAnnotations。

AndroidAnnotations是一个能够让你快速进行Android开发的开源框架,它能让你专注于真正重要的地方。

使代码更加精简,使项目更加容易维护,它的目标就是“Fast Android Development.Easy maintainance”。

通过一段时间的使用发现,相比原生的Android开发,确实能够让你少些很多代码,它的首页也给出了一个简单

的例子,通过例子也可以看到代码比之前几乎少写了一半。由于是开源,所以大家都可以直接拿来使用,这里给

AndroidAnnotations首页 和github上的项目地址AndroidAnnotations Github

至于使用这个开源框架有什么好处(只有不到50k大小),我这里就不详细翻译github上的介绍了,就简单说

一下特性:

1、使用依赖注入(Dependency Injection)#本博接来下几篇的文章将要介绍的开源组件都使用DI, 不熟悉

的可以了解一下Inversion of Control(IoC)

2、简化的线程模型(Simplified  threading model)  

3、事件绑定(Event binding)

4、REST Client

5、No Magic  [不知道为什么这样称呼,直译过来就是:无魔法,它的意思是:AndroidAnnotations在编译

的时候会产生一个子类(接下来你会明白),你查看这个子类,可以看到它是如何工作的]


环境的配置这里就不讲了,github上已经有比较详细的介绍,这也不是本文的重点,本文重点在简单介绍一下

AndroidAnnotations的简单使用及和其他类似框架(BufferKnife)的不同。

我们先来看一看使用AndroidAnnotations时是如何创建Activity的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import android.app.Activity;
import android.widget.EditText;
import android.widget.TextView;
                                                                                                                                                                             
import com.googlecode.androidannotations.annotations.Click;
import com.googlecode.androidannotations.annotations.EActivity;
import com.googlecode.androidannotations.annotations.ViewById;
                                                                                                                                                                             
@EActivity(R.layout.main)
public class MyActivity extends Activity {
                                                                                                                                                                             
     @ViewById(R.id.myInput)
     EditText myInput;
                                                                                                                                                                                    
     @ViewById(R.id.myTextView)
     TextView textView;
                                                                                                                                                                                     
     @Click
     void myButton() {
          String name = myInput.getText().toString();
          textView.setText( "Hello " +name);
     }
}

从上边的代码中,我们可以看到使用了@EActivity、@ViewById、@Click三个annotation(注释),当然它还提供

了其他很多annotation,这里我就结合这段代码介绍一下这个三个。首先@EActivity后必须要有一个layout id 来表示这

个Activity所使用的布局,远来的onCreate方法就不用了,很明显这样可以让我们少写一些代码;@ViewById 就和原来

的findViewById()方法一样,值得注意的是:@ViewById后的id是可以不写的,条件是控件变量名称要与xml中定义的id

必须一致,也就是说 当我在xml文件中定义的TextView的id必须是:android:id="@+id/textView" . 这样我们在@ViewById

后就不用再写括号了,直接写

1
2
@ViewById
TextView textView;

就可以了。但是这样会有一个问题,运行时就会报出:NullPointerException的错误,我们就不能在myButton()方法中

直接使用,而是要在@AfterView注释的方法中使用

1
2
3
4
@AfterView
void init(){
     textView.setText( "Hello" );
}

这样就不会有问题了。对于@Click,方法名和xml文件中的id一样就可以这样写,AndroidAnnotations会自动识别,对于

多个Button,可以写多个@Click,也可以在这样

1
2
3
4
5
6
7
8
@Click({R.id.button1,R.id.button2,R.id.button3})
void buttonClicked(Button bt){
     switch (bt.getId()){
     case R.id.button1:  //
         break ;
         ...
     }
}


其他的一些内容就这里就不多讲,因为内容东西虽不是很多,但也几乎包含了Android开发所有内容,有兴趣的朋友可

以到github自行学习,如有问题、疑问欢迎交流,共同学习。

至于xml文件,还是和之前一样,没有变化。

最最最要注意的一点就是:使用AndroidAnnotations千万要记得,编译的时候会生成一个子类,这个子类的名称就是在

原来的类之后加了一个下划线“_”,比如这个例子产生的子类名称为“MyActivity_”,这就需要你在注册这个Activity的时候,在

AndroidManifest.xml中将 MyActivity 改为 MyActivity_ ,使用的时候也是使用MyActivity_来表示此类,如从另一个Activity跳转

到此节目就要这样用:

1
startActivity( new Intent( this ,MyActivity_.class));

注意,是MyActivity_.class 不是 MyActivity.class;

AndroidAnnotations就介绍到这里,下面再稍微介绍一下github上的一个大牛Jake Wharton(本博接下来会介绍其一些开源组件)

的类似开源框架:Butter Knife

Butter Knife也是使用注入视图的方式使开发人员尽可能少的编写代码。相比AndroidAnnotations,个人觉得没有AndroidAnnotations

使用简单,而且文档几乎也没有。还是先看一小段代码吧:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.example.butterknife;
                                                                                                                                     
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import butterknife.InjectView;
import butterknife.OnClick;
import butterknife.ButterKnife;
import butterknife.OnItemClick;
import butterknife.OnLongClick;
                                                                                                                                     
import static android.widget.Toast.LENGTH_SHORT;
                                                                                                                                     
public class SimpleActivity extends Activity {
   @InjectView(R.id.title) TextView title;
   @InjectView(R.id.subtitle) TextView subtitle;
   @InjectView(R.id.hello) Button hello;
   @InjectView(R.id.list_of_things) ListView listOfThings;
   @InjectView(R.id.footer) TextView footer;
                                                                                                                                     
   private SimpleAdapter adapter;
                                                                                                                                     
   @OnClick(R.id.hello) void sayHello() {
     Toast.makeText( this , "Hello, views!" , LENGTH_SHORT).show();
   }
                                                                                                                                     
   @OnLongClick(R.id.hello) boolean sayGetOffMe() {
     Toast.makeText( this , "Let go of me!" , LENGTH_SHORT).show();
     return true ;
   }
                                                                                                                                     
   @Override protected void onCreate(Bundle savedInstanceState) {
     super .onCreate(savedInstanceState);
     setContentView(R.layout.simple_activity);
     ButterKnife.inject( this );
                                                                                                                                     
     // Contrived code to use the "injected" views.
     title.setText( "Butter Knife" );
     subtitle.setText( "View \"injection\" for Android." );
     footer.setText( "by Jake Wharton" );
     hello.setText( "Say Hello" );
   }
}

总之,两者虽有相似的地方,但看到AndroidAnnotations之后,就不愿使用Butter Knife了。另外,值得你注意的是butter Knife

有个代码生成的插件呢,不过是针对Android Studio的,请看图:


(gif 的图为什么不会动啊)

转自:CSDN:菜鸟的成长史

文章来源: blog.csdn.net,作者:悟空胆好小,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/xushx_bigbear/article/details/44058837

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。