首页
学习
活动
专区
圈层
工具
发布

Android应用架构

代码被划分为两层结构:Data Layer(数据层)负责从REST API或者持久数据存储区检索和存储数据;View Layer(视图层)的职责是处理并将数据展示在UI上。...想象一个简单且常见的场景,应用需要加载一个博客文章列表,然后缓存这些条目到SQLite数据库,最后将他们展示到ListView等列表视图上。...) 等待CacheProvider的回调结果,然后将这些文章展示到ListView等列表视图上 分别处理APIProvider和CacheProvider回调中潜在的异常。...这个简单的示例方法如下: 调用Retrofit service从REST API加载一个博客文章列表 使用DatabaseHelper保存文章到本地数据库,达到缓存的目的 筛选出今天发表的博客,因为那才是...这个View组件也负责处理用户交互,如点击事件和调用相应Presenter中的正确方法。

1.7K70

Android应用架构分析(转)

代码被划分为两层结构:Data Layer(数据层)负责从REST API或者持久数据存储区检索和存储数据;View Layer(视图层)的职责是处理并将数据展示在UI上。...想象一个简单且常见的场景,应用需要加载一个博客文章列表,然后缓存这些条目到SQLite数据库,最后将他们展示到ListView等列表视图上。...方法(回调) 等待CacheProvider的回调结果,然后将这些文章展示到ListView等列表视图上 分别处理APIProvider和CacheProvider回调中潜在的异常。...这个简单的示例方法如下: 调用Retrofit service从REST API加载一个博客文章列表 使用DatabaseHelper保存文章到本地数据库,达到缓存的目的 筛选出今天发表的博客...这个View组件也负责处理用户交互,如点击事件和调用相应Presenter中的正确方法。

93820
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Google 推荐在 MVVM 架构中使用 Kotlin Flow

    Google Android 团队宣布了 Jetpack 的视图模型之后,它已经成为了现代 Android 开发模式最流行的架构之一,如下图所示: ?...在官宣 Jetpack 的视图模型之后,同时 Google 在 [Jetpack Guide](https://developer.android.com/jetpack/guide#fetch-data...,使得代码更加简洁,提高了代码的可读性 易于做单元测试 Kotlin Flow 如何在 MVVM 中使用 Jetpack 的视图模型 MVVM 架构由 View + DataBinding + ViewModel...// 网络请求 val netWorkPokemonInfo = api.fetchPokemonInfo(name) // 将网路请求的数据,换转成的数据库的 model...Dispatchers.IO) 切换到 IO 线程,最后通过 emit() 方法将数据发送给 ViewModel,接下来我们来看一下如何在 ViewModel 中接受 Flow 发送的数据。

    5.8K21

    【愚公系列】《AIGC辅助软件开发》012-AI辅助客户端编程:AI辅助 Android 应用开发

    如何在 Android 应用中创建注册界面? 在 Android 应用中创建注册界面涉及设计用户界面 (UI) 和编写处理用户输入的代码。以下是详细步骤: ### 步骤 1:设置项目 1....2.评估回答是否有用 ChatGPT 的回答并不总是准确无误,这主要是因为它基于生成式模型,依赖于大型预训练模型的构建过程。该模型通过理解输入文本和分析大量训练数据中的统计模式来生成回答。...**独立性**: - `Activity` 是相对独立的组件,一个 `Activity` 通常对应一个屏幕。不同的 `Activity` 之间可以通过 `Intent` 进行导航和数据传递。...**概念**: - `Fragment` 是 `Activity` 的一部分,它是一个可以嵌入到 `Activity` 中的UI模块。...- 常用于主从界面(如主列表和详细视图)中,平板模式下主从同时显示,手机模式下可能分为两个不同的 `Activity`。 ### 区别总结 1.

    1.3K00

    DataBinding最全使用说明

    但是如果是视图设置数据则会走其他函数(get), 如果该函数返回的类型和Model中的类型不匹配则会报异常, 除非你将那个函数改为类型匹配的....在数据和视图的数据不统一时可以使用该注解@InverseMethod解决数据转换的问题 例如数据模型存储用户的id但是视图不显示id而是显示用户名(数据和视图的类型不一致), 我们就需要在两者之间转换....我们需要两个函数: 设置数据到视图的函数 称为set / 设置视图变更到数据的函数 称为get set和get都至少要有一个参数 自身参数必须和另一个函数的返回值对应(不然怎么叫转换) 简单示例: 在用户...// 存储到数据 } } }; 所以如果你没用重写Inverse的数据变更方法将无法让视图通知数据刷新. // 该方***在绑定布局的时候回调 @Override protected...通过DataBindingUtils工具将你自定义的派生类设置到Databinding中, 这里包含全局默认和单例.

    2.8K20

    Android使用RxJava+Retrofit2+Okhttp+MVP练习的APP

    * 根据MovieService的定义编写合适的方法 * 其中observable是获取API数据 * observableCahce获取缓存数据 * new EvictDynamicKey(...一个逻辑模型可以对于多种视图模型 使用MVC的目的是将M和V的实现代码分离,方便扩展,便于以后的管理 从开发者的角度,MVC把应用程序的逻辑层与界面是完全分开的,最大的好处是:界面设计人员可以直接参与到界面开发...Android中也可以说采用了当前比较流行的MVC框架,在Android中:   1) 视图层(View):一般采用XML文件进行界面的描述,使用的时候可以非常方便的引入,但是用xml编写了,又需要在...2) 控制层(Controller):Android的控制层的重任通常落在了众多的Acitvity的肩上,要通过Activity交割Model业务逻辑层处理,这样做的另外一个原因是Android中的Acitivity...MVP的优点: 模型与视图完全分离,我们可以修改视图而不影响模型 可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部 我们可以将一个Presenter用于多个视图,而不需要改变

    64220

    Android使用RxJava+Retrofit2+Okhttp+MVP练习的APP

    * 根据MovieService的定义编写合适的方法 * 其中observable是获取API数据 * observableCahce获取缓存数据 * new EvictDynamicKey(...一个逻辑模型可以对于多种视图模型 使用MVC的目的是将M和V的实现代码分离,方便扩展,便于以后的管理 从开发者的角度,MVC把应用程序的逻辑层与界面是完全分开的,最大的好处是:界面设计人员可以直接参与到界面开发...Android中也可以说采用了当前比较流行的MVC框架,在Android中:    1) 视图层(View):一般采用XML文件进行界面的描述,使用的时候可以非常方便的引入,但是用xml编写了,又需要在...2) 控制层(Controller):Android的控制层的重任通常落在了众多的Acitvity的肩上,要通过Activity交割Model业务逻辑层处理,这样做的另外一个原因是Android中的Acitivity...MVP的优点: 模型与视图完全分离,我们可以修改视图而不影响模型 可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部 我们可以将一个Presenter用于多个视图

    4.6K80

    Android 开发核心技术深度解析

    事件分发机制Android 的事件分发机制是理解触摸交互的核心,它决定了触摸事件(如点击、滑动)如何从 Activity 传递到具体的 View。...执行最终的清理工作,如解注册广播接收器、取消网络请求。onRestart()Activity 从 onStop 状态重新启动时调用。通常用于刷新 UI 数据。...使用场景:与 ViewModel 结合,将数据从 ViewModel 传递到 UI 层。替代传统的事件总线(如 EventBus),用于组件间通信。...核心思想:将平台无关的代码(如数据模型、网络请求、业务规则)提取到一个共享模块中。...)人脸检测 (Face Detection)语言翻译 (Translate)自定义模型 (Custom Model):可以将 TensorFlow Lite 模型集成到应用中。

    19410

    RxJava在Android中的应用

    将RxJava融入到实际项目架构中,解决复杂问题。1.1与Retrofit结合Retrofit官方支持返回Observable或Flowable,是处理网络请求的黄金搭档。...与MVP或MVVM架构结合使用,是现代Android(以及JavaSwing)开发中的最佳实践之一。...1.2.1与MVP(Model-View-Presenter)结合MVP的核心思想是将Activity/Fragment(View)从繁重的业务逻辑中解放出来,使其只负责UI的展示和用户交互的传递。...以下是典型场景与实现:1.5.1并行任务合并(zip操作符)场景:同时发起多个网络请求(如获取用户信息和订单列表),待所有请求完成后统一处理结果。...发射数据量以最慢的Observable为准,超出的数据会被丢弃。1.5.2.顺序任务合并(concat操作符)场景:依次执行多个任务(如先登录再获取数据),前一个任务失败则终止后续任务。

    19410

    用户界面开发基础

    当存在activity中没有设置值时,会使用application中的值。 android:icon android:icon 必须指定一个图像资源ID,用来作为应用程序列表中的程序图标。...---- Activity的生命周期 整体描述 ? 从Activity创建到销毁的过程中需要在不同的阶段调用7个生命周期方法。...---- 在不同Activity之间传递数据 Activity之间切换时,不可避免的要进行数据传递,例如在单击列表中的某个列表项时,小需要编辑与这个列表项相关的数据,这个时候就需要在显示一个Activity...,然后将原始数据传递个这个Activity,这就是一个典型的数据传递的过程。...说明: Base64类是从Android2.2开始支持的,2.1及其以下版本无法通过Android SDK API 进行Base64编码和解码,因此需要借助第三方的类库如common httpclient

    2.4K20

    如何构建Android MVVM应用程序

    的一个Activity文件,一看一言难尽, Android中经常会出现数千行的Activity代码,究其原因,Android中纯粹作为View的各个XML视图功能太弱,Activity基本上都是View...在Android开发中MVP的设计思想用得比较多,利用MVP的设计模型可以把部分的逻辑的代码从Fragment和Activity业务的逻辑移出来,在Presenter中持有View(Activity或者...Fragment)的引用,然后在Presenter调用View暴露的接口对视图进行操作,这样有利于把视图操作和业务逻辑分开来。...但是这个模式还是存在一些不好的地方,比较如说: Activity需要实现各种跟UI相关的接口,同时要在Activity中编写大量的事件,然后在事件处理中调用presenter的业务处理方法,View和Presenter...由 图 1 中ViewModel的模块中我们可以看出ViewModel类下面一般包含下面5个部分: Context (上下文) Model (数据模型Bean) Data Field (数据绑定) Command

    2K10

    为任意屏幕尺寸构建 Android 界面

    △ 更改之前的 Trackr 样式 上图是我们进行更改之前的 Trackr 样式,您会发现不管在什么设备或屏幕下,都会有一个单窗口任务列表以及用于导航到归档或设置页面的底部应用栏。...我们先来进行第一项优化,使用 NavRail 而非底部应用栏,首先我们要考虑的是导航模型,所幸我们不会更改很多具体的视图,仅仅只会更改导航方式,因为 NavRail 会一直存在于整个视图体系中,可以通过它导航到任何其他视图...最后,在设置 NavRail 菜单栏的 ID 来匹配现有导航目的视图的 ID,再在 MainActivity 中为 NavRail 设置 NavController: 的主界面展示 前文中已经介绍了 WindowManager API,目前我们正在将其集成到 Compose 中去,以便更轻松地从 Compose 中访问这些信息。...其中比较有趣的一点是思考应用如何在不同尺寸布局之间转换,例如对于可折叠手机,应用可能会从较大的屏幕变为较小的屏幕。

    5.7K20

    Mvvm、RxJava、Retrofit 三剑合璧

    简介 MVVM的全称就是Model、View、ViewModel,View就是视图,对应Activity和xml文件,纯粹的ui展示层,不涉及任何的业务流程;Model就是数据模型,ViewModel就是最重要的一层结构...Adapter的写法 粉丝列表:从网络获取数据,主要演示RxJava+Retrofit的基本使用方法 构建 理论讲了这么多,不废话了,下面就开始搭建MVVM的应用程序。...在这个demo中,一开始页面是没有数据的,当我们在Activity中调用ViewModel的loadUserInfo后,dataBinding会把我们设置的假数据更新到ui上。...调用了set方法之后,View视图层就和ViewModel层绑定了。...聊天 RxJava + Retrofit 网络请求 前面讲的三个页面都是单机游戏,数据都是本地假数据,最后来看下如果用RxJava+Retrofit进行网络请求,从服务器请求粉丝列表。

    2.9K20

    项目需求讨论 - 动态权限申请分析及相关第三方库源码分析

    targetSDKVersion >= 23 & API(手机系统) >= 6.0:安装时不会获得权限,可以在运行时向用户申请权限。用户授权以后仍然可以在设置界面中取消授权。...我们可以看到API中Compose的介绍:通过一个特定的Transformer函数来转换Observable。...因为后面在对某个权限申请做同意或者拒绝的时候,就会把这个权限的key-value从mRxPermissionsFragment的HashMap中移除,所以这边获得到的一直就是Observable.just...最后通过Observable.concat将Observable.fromIerable生成的多数据原合并在一起变为一个Observable。 ?...所以Buffer操作符所要做的事情就是将数据按照规定的大小做一下缓存,然后将缓存的数据作为一个集合发射出去。

    2.3K40

    Android DataBinding 从入门到进阶,看这一篇就够

    DataBinding 能够省去我们一直以来的 findViewById() 步骤,大量减少 Activity 内的代码,数据能够单向或双向绑定到 layout 文件中,有助于防止内存泄漏,而且能自动进行空检测以避免空指针异常...layout 标签将原布局包裹了起来,data 标签用于声明要用到的变量以及变量类型,要实现 MVVM 的 ViewModel 就需要把数据(Model)与 UI(View)进行绑定,data 标签的作用就像一个桥梁搭建了...方法 之后可以在 Activity 中通过 DataBindingUtil 设置布局文件,省略原先 Activity 的 setContentView() 方法,并为变量 userInfo 赋值...,所以在预览视图中什么都不会显示,不便于观察文本的大小和字体颜色等属性,此时可以为之设定默认值(文本内容或者是字体大小等属性都适用),默认值将只在预览视图中显示,且默认值不能包含引号 android:...双向绑定的意思即为当数据改变时同时使视图刷新,而视图改变时也可以同时改变数据 看以下例子,当 EditText 的输入内容改变时,会同时同步到变量 goods,绑定变量的方式比单向绑定多了一个等号:

    9.9K72

    Android RxJava+Retrofit完美封装(缓存,请求,生命周期管理)

    ,data可以为任何数据类型。...RxJava永远比你想象的强大。RxJava中那么多操作符看到我身体不适,有个操作符compose。...需要的时候调用showProgressDialog即可。 处理数据缓存 服务器返回的数据我们肯定要做缓存,所以我们需要一个RetrofitCache类来做缓存处理。...最后判断如果强制刷新就直接返回fromNetwork反之用Observable.concat()做一个合并。concat操作符将多个Observable结合成一个Observable并发射数据。...要实现上面的功能其实很简单,两部分 随时监听Activity(Fragment)的生命周期并对外发射出去; 在我们的网络请求中,接收生命周期 并进行判断,如果该生命周期是自己绑定的,如Destory,那么就断开数据向下传递的过程

    3.9K11

    运维锅总详解如何设计出一个好的API

    资源聚合层(API Aggregation Layer) 例子:第三方插件可以通过 API 聚合层将额外的功能集成到 Kubernetes API 中,例如网络策略插件。...命名规范:Android API 采用一致的命名风格和编程模型,例如所有的 Activity 类名都以 Activity 结尾。...响应链机制 例子:UIApplication 通过 sendEvent: 方法传递触摸事件,事件依次传递到视图控制器和视图。...Jetpack Compose:声明式 UI 编程。 例子:Activity 和 Fragment 作为视图组件,ViewModel 处理数据,LiveData 作为数据源。...例子:Activity 和 View 的事件分发通过 dispatchTouchEvent() 处理。 响应链机制:使用响应链机制处理事件,事件在视图层级中传递。

    1.3K10

    Android入门教程 | Fragment 基础概念

    传递 container 对系统向扩展布局的根视图(由其所属的父视图指定)应用布局参数具有重要意义。 指示是否应在扩展期间将扩展布局附加至 ViewGroup(第二个参数)的布尔值。...(在本例中,此值为 false,因为系统已将扩展布局插入 container,而传递 true 值会在最终布局中创建一个多余的视图组。) 接下来,需将该片段添加到您的 Activity 中。...向Activity添加Fragment 通常,片段会向宿主 Activity 贡献一部分界面,作为 Activity 整体视图层次结构的一部分嵌入到 Activity 中。...如要在 Activity 中执行片段事务(如添加、移除或替换片段),则必须使用 FragmentTransaction 中的 API。...fragment.setArguments()传递到fragment中; 在该Fragment中通过调用getArguments()得到bundle对象,就能得到里面的值。

    5.2K40
    领券