一个Android app好的构架

本文介绍了一个结合Rxjava、retrofit、dagger2和MVP模式的Android开发框架。该框架通过EventBus连接model和view层,使用DataManger进行数据解耦,采用RxJava简化数据交互流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个好的开发框架,就像一个艺术品,这里给大家推荐一个 android 的框架,使用 Rxjava + retrofit + dagger2 + mvp,结合了当下比较流行的框架,项目层次非常清晰,易于扩展和维护。

框架结构图

这里写图片描述

与常规的 MVP 不同的是,在 modle 层和 view 层通过EventBus 连接,当数据发生变化时,发出对应的 event,注册了这个 event 的 view会采取对应的措施。比如,登录或退出登录用在这样的情形就很合适,在登录或退出登录后,我们可能不止一个 view 会发生变化,如果把这些写在每一个 Presenter 中无疑是很不简洁的代码。

在 modle 层中,抽象出了一个 DataManger,通过DataManger 我们与数据的具体实现进行了解耦,在 P 层我们无需关注数据是来自 DB ,SP 还是网络。我们只关心拿到的数据对象,而在DataManger 和 具体的数据实现中 还有一层 Helper层,这层封装了对数据的具体操作,比如 DBHelper、SPHelper、RetrofitServie,有了这一层封装可以很方便我们进行扩展。

在Presenter层与Model层的数据传递交互我这里也是尽量使用RxAndroid/RxJava,这样做是为了尽量避免回调方面,回调接口,通常都是不易于阅读的,并且如果有多级嵌套就更是一个噩梦。

dagger2依赖注入框架的使用,也是进一步解耦,比如上图里面,view层与presenter解耦,DataManager与Model的解耦。

具体分析

public interface IxxxModel{
    Observable<List<Goods>> getSelectGoods(Context context, String key);
    Observable<List<Goods>> getGoodsPrice(Context context, String skuIds);
}

比如上面是某个Model的接口,获取商品和价格,具体接口实现这里省略,可以是网络获取等等,关键点是上面接口返回的是一个Observable被观察者,这里使用的是RxJava,避免使用回调

public class DataManager {

    @Inject
    IxxxModel mModel;

    private DataManager(){
        DaggerDataManagerComponent
                .builder()
                .dataManagerModule(new DataManagerModule())
                .build()
                .inject(this);
    }

    public static DataManager getInstance(){
        return Holder.INSTANCE;
    }

    private static class Holder{
        public static final DataManager INSTANCE = new DataManager();
    }

    public IxxxModel getxxxModel(){
        return mModel;
    }
}

上面是DataManager ,它是一个单例,提供了IxxxModel的实例,注意IxxxModel的实例并不是直接在这里new出来的,是通过Dagger2依赖注入框架注入的,这里不做Dagger2详细介绍,我之前一篇文件对Dagger2使用已做示例。

public class xxxActivityPresenter implements IxxxActivityPresenter{
    private IxxxActivityView mView;
    private IxxxModel mModel;

    public xxxActivityPresenter(IxxxActivityView view){
        mView = view;
        mModel = DataManager.getInstance().getxxxModel();
    }

    Observable<List<Goods>> getSelectGoods(Context context, String key){
        return mModel.getSelectGoods(context, key)
                .map(new Func1<List<Goods>, List<Goods>>() {
                    @Override
                    public List<Goods> call(List<Goods> goodsList) {
                     //对结果进行中间处理
                     ...... 
                     ......
                    return goodsList;
                }
        });
    }

上面利用Rxjava在Presenter里面很方便进行对结果做中间处理,或更新view。

public class xxxActivity extends BaseActivity implements IxxxActivityView{
    @Inject
    public xxxActivityPresenter  mPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
          //依赖注入mPresenter实例
          DaggerxxxActivityComponent
                .builder()
                .circleDetailBaseActivityModule(new xxxActivityModule(this))
                .build()
                .inject(this);
         EventBus.getDefault().register(this);
    }
} 

这样activity里面就可以很方便操作Presenter对象了。

上面所涉及到的各个框架,如EventBus,Dagger2, RxAndroid等这些知识点,这篇文章都没有讨论它们如何使用,因为这些知识点都比较复杂,需要单独开篇讲解,这里只简单说说这个app框架的大致构架。

更多精彩Android技术可以关注我们的微信公众号,扫一扫下方的二维码或搜索关注公共号:


Android老鸟

这里写图片描述

<think>我们正在回答用户关于Android Studio项目结构的问题,特别是针对新手入门的需求。 根据提供的引用,我们知道Android Studio默认使用Android模式的项目结构,这种结构被转换过,适合快速开发但可能不易理解。 同时,引用中提到了几个关键点: - Android模式:按安卓开发的“组件逻辑”整理文件,把Java/Kotlin代码、资源文件(res)、清单文件等分类展示,隐藏了一些非必要目录,新手友好。 - Project模式:显示真实的目录结构,包含更多文件和目录,适合高级用户。 我们的回答需要清晰解释两种视图(Android视图和Project视图)的区别,并介绍主要目录和文件的作用。 另外,用户是新手,所以我们要用简单易懂的语言,并考虑从创建项目后的默认视图开始介绍。 步骤: 1. 介绍两种项目视图(Android和Project)及其切换方式。 2. 在Android视图下,解释各个主要目录的作用(如java、res、manifests等)。 3. 简要说明Project视图下的真实目录结构,并指出与Android视图的对应关系。 4. 介绍一些关键文件(如build.gradle, AndroidManifest.xml)的作用。 注意:回答中要引用提供的引用内容,并在末尾添加引用标识。 同时,按照要求生成相关问题。</think>### Android Studio 项目结构详解(新手入门) #### 一、项目视图模式 1. **Android 视图(默认)** 适合新手的简化视图,按开发逻辑分类文件: - `app > java`:存放 Java/Kotlin 源码文件 - `app > res`:资源文件(布局、图片、字符串等) - `layout/`:XML 界面文件 - `drawable/`:图片和矢量图 - `values/`:字符串、颜色等常量 - `app > manifests`:`AndroidManifest.xml`(应用配置入口) - **优点**:隐藏非必要目录,专注核心开发[^3] 2. **Project 视图** 显示真实目录结构(适合进阶): ```markdown MyApp/ ├── .gradle/ // Gradle 缓存 ├── app/ // 主模块 │ ├── build/ // 编译生成文件 │ ├── src/ // 源码和资源 │ │ ├── main/ │ │ │ ├── java/ // 代码 │ │ │ ├── res/ // 资源 │ │ │ └── AndroidManifest.xml │ └── build.gradle // 模块级配置 ├── gradle/ // Gradle 脚本 └── build.gradle // 项目级配置 ``` **注意**:`app` 相当于 Eclipse 中的 `project`,整个工程可包含多个模块[^2] #### 二、核心文件说明 1. **`AndroidManifest.xml`** - 定义应用组件(Activity/Service 等) - 声明权限和硬件要求 - 示例代码位置:`app > manifests > AndroidManifest.xml` 2. **Gradle 构建脚本** - `build.gradle (Project)`:全局依赖库配置 - `build.gradle (Module: app)`:模块专属配置(如 SDK 版本、依赖库) ```groovy android { compileSdkVersion 34 // 编译SDK版本 defaultConfig { applicationId "com.example.myapp" // 包名 minSdkVersion 21 // 最低兼容版本 } } dependencies { implementation 'androidx.appcompat:appcompat:1.6.1' // 依赖库 } ``` 3. **资源文件规范** - 命名禁止大写字母:`my_icon.png`(✓) vs `MyIcon.png`(✗) - 多语言在 `values-zh`、`values-en` 等子目录中 #### 三、实用技巧 1. **文件快速定位** 勾选 `Autoscroll to Source`(设置 > Editor > General),点击文件自动定位源码[^4] 2. **视图切换** 点击左上角下拉菜单切换 Android/Project 视图: ![视图切换位置](project_view_switch.png) > **新手建议**:初期使用 **Android 视图**,熟悉后切换到 **Project 视图**理解完整结构[^1]。开发时重点关注 `java/`、`res/` 和 `manifests/` 三大目录。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值