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