开源项目AndroidAnnotations

Android Annotations是一个开源的框架,用于加速 Android应用的开发,可以让你把重点放在功能的实现上,简化了代码,提升了可维护性。

项目地址:https://github.com/excilys/androidannotations


    package com.googlecode.androidannotations.helloworldeclipse;  
      
    import java.util.Date;  
    import java.util.concurrent.TimeUnit;  
      
    import android.app.Activity;  
    import android.app.Notification;  
    import android.app.NotificationManager;  
    import android.app.PendingIntent;  
    import android.content.Intent;  
    import android.database.sqlite.SQLiteDatabase;  
    import android.os.Bundle;  
    import android.util.Log;  
    import android.view.MotionEvent;  
    import android.view.View;  
    import android.view.Window;  
    import android.view.WindowManager;  
    import android.widget.EditText;  
    import android.widget.TextView;  
    import android.widget.Toast;  
      
    import com.googlecode.androidannotations.annotations.Background;  
    import com.googlecode.androidannotations.annotations.Click;  
    import com.googlecode.androidannotations.annotations.EActivity;  
    import com.googlecode.androidannotations.annotations.LongClick;  
    import com.googlecode.androidannotations.annotations.SystemService;  
    import com.googlecode.androidannotations.annotations.Touch;  
    import com.googlecode.androidannotations.annotations.Transactional;  
    import com.googlecode.androidannotations.annotations.UiThread;  
    import com.googlecode.androidannotations.annotations.ViewById;  
    import com.googlecode.androidannotations.annotations.res.BooleanRes;  
    import com.googlecode.androidannotations.annotations.res.ColorRes;  
    import com.googlecode.androidannotations.annotations.res.StringRes;  
      
    @EActivity(R.layout.my_activity) //布局文件在这里声明,不用在setContentView  
    public class MyActivity extends Activity {  
      
        @ViewById  //控件这样标注,由于是IOC模式,因此不需要自己实例化  
        EditText myEditText;  
      
        @ViewById(R.id.myTextView) //提供id来生成控件,如果不指定ID,默认以控件名进行查找,如上面的myEditText  
        TextView textView;  
      
        @StringRes(R.string.hello)  //资源  
        String helloFormat;  
      
        @ColorRes  
        int androidColor;  
      
        @BooleanRes  
        boolean someBoolean;  
      
        @SystemService  
        NotificationManager notificationManager;  
      
        @SystemService  
        WindowManager windowManager;  
      
        /** 
         * AndroidAnnotations gracefully handles support for onBackPressed, whether 
         * you use ECLAIR (2.0), or pre ECLAIR android version. 
         */  
        public void onBackPressed() {  
            Toast.makeText(this, "Back key pressed!", Toast.LENGTH_SHORT).show();  
        }  
          
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            // windowManager should not be null  
            windowManager.getDefaultDisplay();  
            requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);  
        }  
      
      
        @Click //事件控制,可以以按钮的id作为方法名,同时支持的事件还有onLongClick,onTextChange等  
        void myButtonClicked() {  
            String name = myEditText.getText().toString();  
            setProgressBarIndeterminateVisibility(true);  
            someBackgroundWork(name, 5);  
        }  
      
        @Background //开启新线程后台运行,注意不要引用UI控件,而且返回值类型一定是void  
        void someBackgroundWork(String name, long timeToDoSomeLongComputation) {  
            try {  
                TimeUnit.SECONDS.sleep(timeToDoSomeLongComputation);  
            } catch (InterruptedException e) {  
            }  
      
            String message = String.format(helloFormat, name);  
      
            updateUi(message, androidColor);  
      
            showNotificationsDelayed();  
        }  
      
        @UiThread //UI线程  
        void updateUi(String message, int color) {  
            setProgressBarIndeterminateVisibility(false);  
            textView.setText(message);  
            textView.setTextColor(color);  
        }  
      
        @UiThread(delay=2000)  //可以设置延时时间,以毫秒为单位  
        void showNotificationsDelayed() {  
            Notification notification = new Notification(R.drawable.icon, "Hello !", 0);  
            PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(), 0);  
            notification.setLatestEventInfo(getApplicationContext(), "My notification", "Hello World!", contentIntent);  
            notificationManager.notify(1, notification);  
        }  
      
        @LongClick  
        void startExtraActivity() {  
            Intent intent = new Intent(this, ActivityWithExtra_.class);  
      
            intent.putExtra(ActivityWithExtra.MY_DATE_EXTRA, new Date());  
            intent.putExtra(ActivityWithExtra.MY_STRING_EXTRA, "hello !");  
            intent.putExtra(ActivityWithExtra.MY_INT_EXTRA, 42);  
      
            startActivity(intent);  
        }  
      
        @Click  
        void startListActivity(View v) {  
            startActivity(new Intent(this, MyListActivity_.class));  
        }  
      
        @Touch  
        void myTextView(MotionEvent event) {  
            Log.d("MyActivity", "myTextView was touched!");  
        }  
      
        @Transactional  
        int transactionalMethod(SQLiteDatabase db, int someParam) {  
            return 42;  
        }  
      
    }  

这个项目的好处是使用到了IOC模式,代码量小而且简洁,使程序员更多的关注于业务逻辑而不是页面,而且@Backgroud这个标签下开启的线程在线程池中管理。
类似的项目还有Android Binding,RoboGuice等,有兴趣可以看一下这个文章
CLEAN CODE IN ANDROID APPLICATIONS一个Spring gay写得,很不错哦~
http://blog.springsource.com/2011/08/26/clean-code-with-android/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值