AndroidAnnotations(Code Diet)android快速開發框架
最近用了一款很不錯的android快速開發框架,1000行的代碼瞬間變成幾百行,不用你會后悔的
特點:
(1) 依賴注入:包括view,extras,系統服務,資源等等
(2) 簡單的線程模型,通過annotation表示方法運行在ui線程還是后臺線程
(3) 事件綁定:通過annotation表示view的響應事件,不用在寫內部類
(4) REST客戶端:定義客戶端接口,自動生成REST請求的實現
(5) 沒有你想象的復雜:AndroidAnnotations只是在在編譯時生成相應子類
(6) 不影響應用性能:僅50kb,在編譯時完成,不會對運行時有性能影響。
PS:與roboguice的比較:roboguice通過運行時讀取annotations進行反射,所以可能影響應用性能,而AndroidAnnotations在編譯時生成子類,所以對性能沒有影響
現在我們開始試用這個吧
- 首先我們要準備一下基本環境 </ul>
1.因為目前主流市場IDE環境轉入android studio,所以我就直說它的搭建環境吧,打開build.gradle(project)文件導入我們需要的編譯環境,下載編譯環境工具包
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.1.+' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' //導入編譯AndroidAnnotations框架需要使用的工具包 } } tasks.withType(JavaCompile) { options.encoding = "UTF-8" } allprojects { repositories { jcenter() //下載jcenter服務器上的插件工具包 } }
2.打開build.gradle(Module)文件導入我們需要的編譯環境,導入下載的工具包apt,下載框架需要的包,然后在運行之前編譯的配置,并且輸出日志
apply plugin: 'android' apply plugin: 'android-apt' //導入下載的工具dependencies { compile fileTree(include: '*.jar', dir: 'libs') compile project(':SwitchCompatLibrary') compile 'com.orhanobut:logger:1.1+' compile 'org.androidannotations:androidannotations:3.3.1' //導入框架包 apt 'org.androidannotations:androidannotations:3.3.1' //用之前下載的工具根據框架包編譯項目 } apt{ //輸出日志文件 arguments{ trace true androidManifestFile variant.outputs[0].processResources.manifestFile } }
android { compileSdkVersion 15 buildToolsVersion "21.1.2" lintOptions{ checkReleaseBuilds false } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] jniLibs.srcDirs=['libs'] }
instrumentTest.setRoot('tests') debug.setRoot('build-types/debug') release.setRoot('build-types/release') }
}</pre>
大部分情況網絡情況不好下,這個包是下載不下來的,我們可以下載在本地放在libs文件下
compile 'org.androidannotations:androidannotations:3.3.1' //導入框架包 apt 'org.androidannotations:androidannotations:3.3.1' //用之前下載的工具根據框架包編譯項目 使用方法
compile files('libs/androidannotations.jar')
- 接下來我們使用了 </ul>
閑話不多了,直接給代碼了,下面這段代碼是我們平時一般寫android的原生代碼
public class BookmarksToClipboardActivity extends Activity {BookmarkAdapter adapter;
ListView bookmarkList;
EditText search;
BookmarkApplication application;
Animation fadeIn;
ClipboardManager clipboardManager;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN); setContentView(R.layout.bookmarks); bookmarkList = (ListView) findViewById(R.id.bookmarkList); search = (EditText) findViewById(R.id.search); application = (BookmarkApplication) getApplication(); fadeIn = AnimationUtils.loadAnimation(this, anim.fade_in); clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); View updateBookmarksButton1 = findViewById(R.id.updateBookmarksButton1); updateBookmarksButton1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { updateBookmarksClicked(); } }); View updateBookmarksButton2 = findViewById(R.id.updateBookmarksButton2); updateBookmarksButton2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { updateBookmarksClicked(); } }); bookmarkList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> p, View v, int pos, long id) { Bookmark selectedBookmark = (Bookmark) p.getAdapter().getItem(pos); bookmarkListItemClicked(selectedBookmark); } }); initBookmarkList();
}
void initBookmarkList() { adapter = new BookmarkAdapter(this); bookmarkList.setAdapter(adapter); }
void updateBookmarksClicked() { UpdateBookmarksTask task = new UpdateBookmarksTask();
task.execute(search.getText().toString(), application.getUserId());
}
@NoTitle @Fullscreen @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()); }
}</pre>
@Rest("@Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String userId);
}</pre>
對比之后我們發現我們代碼少了很多,很多人可能會顧慮代碼少了,里面是不是做了很多消耗性能多余的操作,這里大家不用擔心,根據AndroidAnnotations寫的代碼,在編譯時生成子類,子類的代碼和原生一模一樣,所以對性能沒有影響
- 常用地址
</ul>
- api地址和demo地址https://github.com/excilys/androidannotations/wiki/Cookbook
- 下載地址https://github.com/excilys/androidannotations
</ol>
- 總結
</ul>
- 基本語法就不和大家說呢,對程序員來說有了api文檔和demo就行了
- 這個框架語法很簡單用一下就會了,就是環境有點蛋疼,這里只說了一個IDE環境搭配,其它的大家可以看文檔
- 東西雖然很好,但是希望android初學者學好基礎后再來使用框架,框架是不斷推出新的,如果你基礎都不知道,以后變遷項目,或者項目報錯你會對很多錯誤很茫然的,對你以后的發展也不好。
</ol> 來自:http://www.cnblogs.com/qingkong/p/4635729.html