開源一個小APP(明天計劃),歡迎交流Android架構

項目傳送門:http://git.oschina.net/imxiaoyu/TomorrowPlan

版權聲明:本app進提供交流使用,版權歸我本人所有,本套架構可以隨意使用,但不可將APP上傳各大應用市場,若是使用本套架構而非同類型產品,則無限制。

整套架構的核心在於將業務、邏輯、代碼的粒度劃分得更細,儘量讓每一個類的代碼不超過三百行,業務分類更加的清晰明瞭,把UI和業務邏輯儘量的結耦合。

WiKi有粗略的說明,不明白或者有覺得不妥的地方,歡迎加入交流羣(羣號:616045201)

項目的不足:
因爲這個app一開始的時候並不是用的這個架構,只是花了一天的時間重構整理,所以很多地方整理的並不是很徹底,所以可能會出現某些地方看着有些不倫不類。之後如果有精力,可能會抽點時間再整理一下。
common模塊我是搭建有另外的一個庫,所以這裏就把common的git管理去掉了,之後會一直更新,當然,更新的幅度不會很大,主要是更新一些我需要用到的工具類或者UI組件。傳送門:http://git.oschina.net/imxiaoyu/android_common_tools

APP截圖:
輸入圖片說明
輸入圖片說明
輸入圖片說明

代碼包大致目錄:

 

架構大概說明:

整體架構

整個業務處理的架構採用的是類MVP架構,最核心的思想是吧系統的粒度降到最小,能分就往下分,讓每一個類最多不超過300行代碼。整體架構主要氛圍4個結構:common、core、domain、module:
common:主要是用於存放一些公共類庫、組件、工具等等,爲方便管理,獨立成了一個庫出來,可以多個應用共享使用。
core:主要存放一些與項目相關的配置文件、輔助工具、信息緩存等等。
domain:程序入口
module:具體的業務模塊,後續會詳細講解

Common詳解

base

base主要用於存放一些常用類的父類(基類),主要作用是方便快捷的爲一些重複性的業務提供更爲方便快捷的方法。主要需要注意:adapter、helper、presenter、ui、popup_window這幾個包。每一個Activity如無特殊需求,都必須繼承於BaseActivity。

impl

impl主要用於存放一些常用的自定義回調接口。

utils

utils主要是各種各樣的工具類

widget

widget主要是存放一些有特殊功能的自定義控件

Core詳解

cache

cache下的每一個類都需要繼承BaseSharedPreferences,主要作用是緩存數據,列表數據通常都是採用json字符串的當時緩存通過輕量級存儲SharedPreferences來完成。

custon

算是整個程序的入口,具體需要在androidmainfest.xml中配置

entity

一些用到的或者可能用到的實體類

network

主要是存放tcp連接相關的一些東西,如果是http請求的話,會將封裝的一些東西,放在跟network同級別的一個叫做http的包裏

remote

主要是遙控器的,負責的是與SDK的交互操作,接口地址:https://wiki.bomeans.com/index.php/Android_IR_SDK

route

route只有一個類AppRoute,起作用主要是將整個app的所有頁面跳轉都集中到AppRoute這個類來處理,相當於是請求分發。而具體的跳轉方法不再使用原始的startActivity(intent);的形式,而是將StartActivity方法封裝在每一個Activity頁面的一個公共的靜態方法中,如果需要帶值跳轉,則可以更加的方便處理,如:

public static void startActivity(Activity activity,int sceneType){
        ALog.e("sceneType1:"+sceneType);
        Intent intent=new Intent(activity,SceneEditorActivity.class);
        intent.putExtra(ACTIVITY_DATA_SCENE_TYPE,sceneType);
        startActivity(activity,intent);
    }

Domain詳解

沒啥好說的,程序的第一個頁面,通常是啓動頁

Module詳解

Module下面通常會根據項目的大小對項目進行分層,本項目採用的二層的形式,即要定位到一個HomeActivity頁面,類路徑是module.home.home.HomeActivity.class,即Module的本身是一個大模塊,然後根據功能分類劃分爲多個小模塊,最後每一個小模塊有多個頁面。在module.home.home中,第一個home是一個多個小模塊,會包含多個頁面,第二個home則是具體的頁面集合,因爲一個頁面不單單隻有Activity類一個類,還需要其他配套類,所以第二個home可以說只是HomeActivity這個頁面的類合集。

第二個home的主要結構是HomeActivity類,然後還會繼續的分幾個包,具體的包會根據需求而定,主要有四大類:view、adapter、helper、presenter。

view

一個Activity雖然只算是一個頁面,但是一個頁面也會有許許多多的複雜情形,若是邏輯或者任務簡單,可以直接寫在Activity中,但是如果是業務稍稍複雜一點,那就按具體的任務分出來會方便管理很多,可擴展性也強上很多。

adapter

列表適配器,值得注意的是,最開始的ListView或者GridView,都統一用recyclerview來替代,而adapter和裏面的holder都需要基礎Base基類, 詳情看core/base裏面的類。

helper

小工具類,介於普通的方法和Utils公用工具類之間。,即只是針對本APP的特定場景的小型版本的Utils。

presenter

主要用於處理一些比較繁雜的且與UI無關的業務,如:網絡請求等

其他注意事項

在同一個“home”包下,無論是activity還是其他的view、helper、presenter等等,都應該是互聯互通的。即view裏面可以通過HomeActivity的方式將getActivity()強制轉換成homeActivity對象,然後對其他的helper、view等做交互處理。

發佈了40 篇原創文章 · 獲贊 22 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章