ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AndroidAnnotations
    dev/android 2013. 10. 12. 04:30

    http://androidannotations.org/

    Fast Android Development. Easy maintainance.

       

    빠른 개발 쉬운 유지보수라고 대놓고 자랑질이다.

    어노테이션을 사용하기 때문에 확실히 코드의 경량화나 가독성은 좋아진다.

    이놈의 특징은..

       

    컴파일 타임에 annotation processing이 되기 때문에 런타임에 리플렉션으로 인한 오버헤드가 없다.

    컴파일 타임에 annotation processing이 되기 때문에 빌드 시간이 조금 길어진다.

    유저가 생성한 Activity를 상속받아 ActivityName에 _를 붙혀 새로운 Activity를 만든다.

    • mainActivity -> mainActivity_
    • 실제 실행되는 Activity는 mainActivity_ 이다.
    • 그래서 AndroidManifest.xml파일의 모든 Activity Name에 _를 붙혀줘야 한다.
    • 코드상에도 _를 붙혀줘야 한다. [ startActivity(new Intent(mainActivity.this,secondActivity_.class)); ]

     

    @EActivity(R.layout.bookmarks)

    public class BookmarksToClipboardActivity extends Activity {

        BookmarkAdapter adapter;

     

        @ViewById

        ListView bookmarkList;

     

        @ViewById

        EditText search;

     

        @App

        BookmarkApplication application;

     

        @RestService

        BookmarkClient restClient;

     

        @AnimationRes

        Animation fadeIn;

     

        @SystemService

        ClipboardManager clipboardManager;

     

        @AfterViews

        void initBookmarkList() {

            adapter = new BookmarkAdapter(this);

            bookmarkList.setAdapter(adapter);

        }

        @Click({R.id.updateBookmarksButton1,R.id.updateBookmarksButton2})

        void updateBookmarksClicked() {

            searchAsync(search.getText().toString(), application.getUserId());

        }

        @Background

        void searchAsync(String searchString, String userId) {

            Bookmarks bookmarks = restClient.getBookmarks(searchString, userId);

            updateBookmarks(bookmarks);

        }

        @UiThread

        void updateBookmarks(Bookmarks bookmarks) {

            adapter.updateBookmarks(bookmarks);

            bookmarkList.startAnimation(fadeIn);

        }

        @ItemClick

        void bookmarkListItemClicked(Bookmark selectedBookmark) {

            clipboardManager.setText(selectedBookmark.getUrl());

        }

    }

     

    @EActivity(R.layout.bookmarks) : onCreate의 setContentView(R.layout.bookmarks) 와 같다.

    @AfterViews : UI Mapping이 완료된 후에 호출된다.

    @ViewById : findViewById 와 같다. 가장 눈에 먼저 들어오는 Annotation이다. 변수명과 같으면 자동으로 뷰와 연결해준다.

                    @ViewById(R.Id.ViewName)으로도 사용 가능하다. 라인수만 보면 똑같이 두줄을 사용한다.

                    또 변수명 위의 어노테이션 때문에 이부분은 가독성이 더 떨어지는 것 같다.

                    뷰를 캐스팅 해야만 하는 상황이 있다면 사용할 수 없다.

    @Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2}) : OnClickListener 와 같다.

    @Background : 네트워크 작업 같은 Background Thread에 에 사용하면 된다.

    @UiThread : Background 작업 후 Handler 대신 사용하면 된다.

    @App : this.getApplicationContext()와같다. Applicatio Class를 Inject 해준다.

    @SystemService : Context.getSystemService와 같다.

     

    나머지 어노테이션은 여기 .

     


    결론은..

    기존 프로젝트에 적용 하기에는 좀 그렇다.

    타 라이브러리와의 충돌 등의 이유로 AndroidAnnotations을 제거해야 할 경우에 해야할 작업이 너무나 많아진다.

    쉬운 유지보수는 수긍한다.

    빠른 개발은 개드립이다.

    댓글