Android UI 及 IO 工具庫:AndroidUIO
Android APP framework 是一個拖沓冗余的體系,正是因為他的不足,才需要我們去完善他。
通用回調機制
---- 有物混成,先天地生
函數,是編程中最常見的處理單元,加上泛型信息,我們可以讓函數的表達能力更強。
Java的函數雖然用起來不如一些函數式語言那樣簡潔,但是,包裝在接口下面的函數,還可以更加方便的攜帶更豐富的信息。
在這套類庫中,一個簡單通用的可以攜帶泛型信息的回調接口, 將貫穿整個系統。
設計理念
---- 有之以為利,無之以為用。
設計一個具有良好擴展性的基礎框架, 最重要的一點是掌握 “有”和“無”的平衡。
-
有: 我需要提供那些模塊?那些功能?什么結構?
-
無: 我在我的系統中提供那些自定義的坑,可以讓你自己去完善,去擴展。
我在這套類庫中, 通過一個通用回調接口, 用來描述“無”的存在,絕大部分功能都以“無” 為中心來設計。
自動化處理
---- 太上,不知有之。
上善若水,我認為最好的工具,就是,當他幫你做了實實在在的事情,而你不需要關心他的存在。
在這個UI&IO框架中,大多數情況下都尊崇這個設計思想。
如:
-
當你適用網絡圖片的時候,不用關心圖片緩存的操作;
-
當你編寫網絡任務時,Activity暫停/恢復/終止時,您無需再為相關的任務調度優化操心;
-
沒有網絡的時候,不需要關心離線展示的支持;等等...
網絡請求
-
任務管理
-
自動根據生命周期調度(終止/暫停/繼續)任務。
-
隨時手動終止任務。
-
網絡緩存優化
-
自動緩存
-
自動離線支持
-
雙回調機制
-
快速內容展示
-
網絡數據檢查并按需更新
圖片處理
-
簡單bind接口
-
自動計數和內存管理
-
自動支持動畫gif
-
自定義圖像預處理接口
比如,如果你想畫個圓角陰影什么的
自動模型轉換
數據結構和java對象是一一對應的, 但是我們很多老實的程序員天天樂此不疲的手動解析json,手動吧這些json一個個復制到java對象模型中, 這些實在是沒有必要。
存儲模型
-
健值對存儲DSL
-
健值存儲接口的屬性,可以自動實現讀寫抄作, 系統通過動態代理自動將其實現。
-
關系數據庫映射DSL
-
定義一個java類,加上簡單的注解,即可描述一個簡單的數據存儲格式,根據這個類就可以自動創建出一個SQLiteMapping, 自動實現一個簡單的關系數據映射DAO。
狀態管理
-
Activity 狀態
-
##其他
-
網絡檢測。
-
Toast,Application等等
Http Request && Cache && schedule automatic
//the http request will be canceled after activity finished //and auto paused after the activity is paused when the task is pauseable. //and auto resume after the activity is resume again. Cancelable task = UIO.get(new Callback<MyClass>(){ //http stream will be auto parsed and mapping to you standard javabean object. public void callback(MyClass javabean){ //TODO:... } public void error(Throwable ex, boolean callbackError){ //TODO:.... } },url); // and you can cancel it any time by yourself // task.cancel(); // double callback (cache first show and update on need) Cancelable task = UIO.get(new CacheCallback<MyClass>(){ public void callback(MyClass javabean){ //TODO: on cache parsed! } public void update(MyClass javabean){ //TODO: on new network result(null for not modified data) } public void error(Throwable ex, boolean callbackError){ //TODO:.... } },url); // post file Cancelable task = UIO.post(new Callback<MyClass>(){ public void callback(MyClass javabean){ //TODO: upload success! } public void error(Throwable ex, boolean callbackError){ //TODO:.... } }, url, fileName, file);
Image Bind
//the image url will auto load and parse and set as the drawable for the imageView //if the image url is a animated gif,then it is show as a movie! UIO.bind(imageView,imageUrl); //you can set the drawableFactory for the image loading(getLoadingDrawable) and process(such as radious, shawdown....) //and set the fallback drawable for the action UIO.bind(imageView,imageUrl,drawableFactory,fallbackResourceId); //you can set the callback for the bind action(callback on image load(or cached) and bind to image view) UIO.bind(imageView, imageUrl,drawableFactory,fallbackResourceId, callback);//Callback<Drawable>