Java注解:

   注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

作用分类:
①编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】
② 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
③编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】
Androidannotations框架特性
1、使用依赖注入(Dependency Injection)

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

3、事件绑定(Event binding)

4、REST Client

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

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

AndroidAnnotations官网: http://androidannotations.org/

代码:

@NoTitle  //无标题
@Fullscreen //全屏
@EActivity(R.layout.activity_my)
public class MyActivity extends ActionBarActivity {
//==============================================基本的注解=================================================
@ViewById
Button button1; @ViewById
Button button2; @ViewById(R.id.textview1) //指定id的注入
TextView textView; @ViewById
ProgressBar progressBar; @ViewById
ImageView imageView; //获取系统service的方法(取代原来的clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);)
@SystemService
ClipboardManager clipboardManager; @Click({R.id.button1,R.id.button2,R.id.button3,R.id.button4})
public void simpleButtonOnClicked(View view){
switch (view.getId()){
case R.id.button1:{
textView.setText("Button1 is Clicked!");
}
break;
case R.id.button2:{
textView.setText("Button2 is Clicked!");
}
break;
case R.id.button3:{
String content = clipboardManager.getText().toString();
Toast.makeText(getApplicationContext(),"剪贴板内容: " + content, Toast.LENGTH_SHORT).show();
}
break;
case R.id.button4:{
Toast.makeText(getApplicationContext(),"滚动条开始了!",Toast.LENGTH_SHORT).show();
progressBarWorks();
}
break;
}
} @LongClick({R.id.button2})
public void buttonOnLongClicked(View view){
switch (view.getId()){
case R.id.button1:{
textView.setText("Button1 is LongClicked!");//由于没注册,所以不可能被触发
}
break;
case R.id.button2:{
textView.setText("Button2 is LongClicked!");//可触发
}
break;
}
} //===================================================关于资源的注解========================================= @AnimationRes(R.anim.rotate)
Animation animationRotate; @DrawableRes(R.drawable.myphoto)
Drawable myphoto; @ColorRes(R.color.love)
Integer mycolor; @TextRes(R.string.textres)
CharSequence text; @Click({R.id.button5,R.id.button6,R.id.button7})
public void animationButtonOnClicked(View view){
switch (view.getId()){
case R.id.button5:{
imageView.startAnimation(animationRotate);
}
break;
case R.id.button6:{
imageView.setImageDrawable(myphoto);
}
break;
case R.id.button7:{
Toast.makeText(getApplicationContext(),text.toString(),Toast.LENGTH_SHORT).show();
}
break;
}
} //==============================================关于线程的注解================================================
//相当于一个新的任务AsyncTask或者新线程Thread
@Background
public void progressBarWorks(){
//相当于一个新的线程中执行: @Background
int i = 1;
while (i <= 10){
Log.e("progress","进度: " + i);
try {
Thread.sleep(1000);
updateProgressBar(i);
//直接progressBar.setProgress(i);也可以的,所以@Background注解内部可能实现了handler机制
i++;
} catch (InterruptedException e) {
e.printStackTrace();
}
} } //指代UI线程
@UiThread
public void updateProgressBar(int i){
progressBar.setProgress(i);
if (i == 10){
Toast.makeText(getApplicationContext(), "滚动条结束",Toast.LENGTH_SHORT).show();
}
} //=======================================关于几个事件的先后顺序=============================================== @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("FirstToLast", "onCreate"); //可省略!
//setContentView(R.layout.activity_my); //progressBar.setMax(100); 报错,空指针异常
//因为在onCreate()被调用的时候,@ViewById还没有被set,也就是都为null
//所以如果你要对组件进行一定的初始化,那么你要用@AfterViews注解
} @AfterViews
public void init(){
Log.e("FirstToLast","init");
progressBar.setMax(10);
} @Override
protected void onResume() {
super.onResume();
Log.e("FirstToLast","onResume");
} @Override
protected void onStart() {
super.onStart();
Log.e("FirstToLast","onStart");
} }
04-27 23:11