/ 前言 / Android开发发展到今天已经相当成熟了,各种架构大家也都耳熟能详,如MVC,MVP,MVVM等,其中MVVM更是被官方推荐,成为Android开发中的显学。...模型层(Model):主要负责网络请求,数据库处理,I/O的操作,即页面的数据来源 由于android中xml布局的功能性太弱,Activity实际上负责了View层与Controller层两者的工作,...主要负责网络请求,数据库处理等操作,这个没有什么变化 我们可以看到,MVP解决了MVC的两个问题,即Activity承担了两层职责与View层与Model层耦合的问题。...MVVM架构图如下所示: 图片 可以看出MVVM与MVP的主要区别在于,你不用去主动去刷新UI了,只要Model数据变了,会自动反映到UI上。换句话说,MVVM更像是自动化的MVP。...后发送给Model层进行数据请求 单向数据流 MVI强调数据的单向流动,主要分为以下几步: 用户操作以Intent的形式通知Model Model基于Intent更新State View接收到State
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1.status_bar_latest_event.xml的修改: 源代码: xmlns:android=”http://schemas.android.com.../apk/res/android “> 1.通知条目高度的修改:上面的65.0sp和64.0sp就是高度 2.通知条目下面一般都有一条白线, 透明方法: ①drawable-mdpi文件夹内 divider_horizontal_light_opaque...———————————分割线——————————————- 3.status_bar_tracking.xml 的修改 源代码: xmlns:android=”http://schemas.android.com...——————————- 下拉底部加入运营商: 在的下面加入: 上面的android:background=”#bf000000″是运营商的背景,可以改成一张图片。...android:gravity=”center”是字体的位置(Left 左 Right 右) ———————————–分割线—————————- 4.status_bar.xml的修改 1.状态栏显示运营商
因为它的用处实在太大了。 想象一下,有这么一个场景(需求),两个不同的页面,但是页面的展示 UI 是完全相同的。这时候你会想到,这很简单啊,复用吗。...这时候,接口就派上用场了,既然 UI 相同数据格式不同,让它们实现一个相同的接口不就行了吗,具体接口里面的方法,根据页面具体需求添加即可。...炫甜炫甜的":"肌酸肌酸的"; } } 可以看到 Teacher 和 Apple 分别实现了 ITeacherAppleAdapter 接口,本来不同的 model 是不能使用同一个 Adapter...上面说了接口的实际应用场景,那下面说起 MVP 就比较好理解了。因为很多人在开始使用 MVP 时候,总是在想,为什么要新建那么多接口再实现,直接调用具体的方法多好呢?...一个 Activity 可以有多个 Presenter,需要什么业务加入什么 Presenter 即可,并实现这个 Presenter 需要的 View 接口。 这里分享下我的 MVP 模板: ?
因为MVP模式可以说是MVC模式在Android开发上演变过来的。 ?...MVC开始存在于桌面程序中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,以便后续程序的维护以及更新。...对于原生的Android项目而言: M(Model): 跟MVC模式中是同样的作用 V(View): 指的是Activity或者Fragment,负责UI元素的初始化,建议UI元素与Presenter的关联...1)LoginView主要包含更新UI的方法,让LoginPresenterImpl类持有其引用。这样LoginPresenterImpl类就可以通过LoginView来更新UI。...如果需要请求服务器来判断登录是否成功,那么这里也是进行网络操作。 ? 如果你能把上面的代码拿下,那么你对MVP模式已经理解差不多了。你自己再把剩余的代码看一遍,举一反三,就可以打通了MVP这道脉。
Activity 和Fragment 视为View层,负责处理 UI。 Presenter 为业务处理层,既能调用UI逻辑,又能请求数据,该层为纯Java类,不涉及任何Android API。...乞丐版MVP架构模式的代码实现 下面我们用 MVP 模式构造一个简易模拟请求网络的小程序。效果图如下: ! ? ?...Model类 Model 类中定了具体的网络请求操作。为模拟真实的网络请求,利用postDelayed方法模拟耗时操作,通过判断请求参数反馈不同的请求状态: ?...,升级为可以在实际开发中使用的平民版MVP架构。...调用View可能引发的空指针异常 举一个例子,在上述乞丐版MVP架构中的应用请求网络数据时需要等待后台反馈数据后更新界面,但是在请求过程中当前Activity突然因为某种原因被销毁,Presenter收到后台反馈并调用
1 问题描述 做过Android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面通常会出现 UI的增加、减少、内容变化、以及跳转界面发生变化等问题。...本文以自选股的个人页卡为例(界面如下图所示),并给出了一套方案来解决动态更新UI的问题以及更好的解决未读提醒的逻辑。 ?...(3)远程控制动态更新UI 当远程控制发生变化时(5分钟主动发一次请求),通过解析远程控制接口返回的json串,生成PersonalItem对象的列表。其中每一项对应UI上面的一个Item。...另外,在通过远程控制动态更新UI的过程中也遇到了一些坑,比如远程控制更新的时刻,恰好用户退出app,此时系统刚好销毁activity。...利用递归的方式将数据映射为UI。同时处理了点击事件。数据源则可以通过远程控制动态的更新,RD从中解放。
实现这个interface 编写Molde,里面的业务逻辑主要包括网络请求获取数据,数据库读取等耗时操作,通过M层回调给P层通知V层更新UI 编写Presenter,P层持有V和M的引用,实现P层的回调...,并且回调给V层更新 Activity中调用P执行业务逻辑,更新UI 具体代码就不贴了,相信了解过MVP的都会写基本的代码 但是问题也就出来了,由于P层需要和V层进行通信,更新UI时需要持有V层的view...Example 我们按照功能模块来构造我们的MVP,可能大家注意到了没有M层啊,是的,这里我把M层舍弃掉了,把业务逻辑、网络请求直接放在了P层,大大减少了类的数量,这样我们每个功能模块只需要新建一个View...和一个Presenter就可以满足了,特殊的需求再通过特殊方法来处理,下面我们举一个简单的例子: 网络请求我用的 jeasonlzy 大神的OKGo3,刚出锅没几天,尝试一下,个人认为封装的非常非常好,...继承了MVPActivity并实现了HomeView,同时将泛型对象设为我们的HomeView和HomePresenter,这样我们就可以直接调用P层的网络请求方法,同时也能回调更新UI package
简而言之:View层不做任何业务逻辑、不涉及操作数据,UI和数据严格的分开。 UI更新和事件相应全部使用数据绑定,也就是DataBinding来实现。这就是MVVM和MVP、MVC很明显的不同之处。...简述下数据流走向: View中使用DataBinding的Command来绑定事件和响应事件,触发网络请求;ViewModel进行分析处理,调用Model的数据请求方法;Model将收到的请求参数等信息封装...,实体类更新,使得UI更新!...这里呢,我使用的是自己封装过的Retrofit+RxJava的网络请求库,上面的Model用来进行新闻实体类News的网络请求; 也定义了一个CallBack接口:此回调可以让接下的ViewModel获得...当事件触发时,Model进行网络请求,在回调中更新实体类,便可对应的更新UI界面。 总结 实例中只是一个简单的功能的展示,大家在熟悉了MVVM后可再深度封装。
模型层(Model):主要负责网络请求,数据库处理,I/O的操作,即页面的数据来源 由于android中xml布局的功能性太弱,Activity实际上负责了View层与Controller层两者的工作,...层 Model层:主要负责网络请求,数据库处理等操作,这个没有什么变化 我们可以看到,MVP解决了MVC的两个问题,即Activity承担了两层职责与View层与Model层耦合的问题 但MVP架构同样有自己的问题...层 MVP的问题在于随着业务逻辑的增加,View的接口会很庞大,MVVM架构通过双向数据绑定可以解决这个问题 MVVM与MVP的主要区别在于,你不用去主动去刷新UI了,只要Model数据变了,会自动反映到...MVI强调数据的单向流动,主要分为以下几步: 用户操作以Intent的形式通知Model Model基于Intent更新State View接收到State变化刷新UI。...但通过以上的分析与介绍,我相信使用MVI架构代替没有使用DataBinding的MVVM是一个比较好的选择~ 相关视频推荐: 【2021最新版】Android studio安装教程+Android(安卓
Android使用RxJava+Retrofit2+Okhttp+MVP练习的APP 项目截图 这是我的目录结构 五步使用RxJava+Retrofit2+Okhttp+RxCache...return mRetrofit; } } 第五步:新建HttpData类 用于统一管理请求 /* * 所有的请求数据的方法集中地 * 根据MovieService的定义编写合适的方法...Android中也可以说采用了当前比较流行的MVC框架,在Android中: 1) 视图层(View):一般采用XML文件进行界面的描述,使用的时候可以非常方便的引入,但是用xml编写了,又需要在...3) 模型层(Model):对数据库的操作、对网络等的操作都应该在Model里面处理,当然对业务计算等操作也是必须放在的该层的。 MVP MVP 就是基于MVC 的模式上的一个演化版本。...而实质上,它既承担了View,同时也包含一些Controller的东西在里面。随着项目的迭代更新,这对开发很不友好,耦合度也原来越高,项目越来越难维护,而MVP 就是解决这样的痛点。
HttpUrlConnection 最开始学android的时候用的网络请求是HttpUrlConnection,当时很多东西还不知道,但是在android 2.2及以下版本中HttpUrlConnection...Client,而android2.3及以上版本使用HttpUrlConnection的呢,答案是肯定的,就是Volley,它是android开发团队在2013年Google I/O大会上推出了一个新的网络通信框架...默认情况下,OKHttp会自动处理常见的网络问题,像二次连接、SSL的握手问题。 如果你的应用程序中集成了OKHttp,Retrofit默认会使用OKHttp处理其他网络层请求。...速度上比volley更快; 如果你的应用程序中集成了OKHttp,Retrofit默认会使用OKHttp处理其他网络层请求。...RoboSpice 见之前写的一篇博文 RoboSpice:android异步网络库简单用法 总结 网络请求库多种多样,最终其本质思想是一致的,要学会融汇贯通,还是要fucking the source
image.png MVP是一种使用广泛的基础架构模式,使用基于事件驱动的应用框架。 MVP从更早的MVC框架演变过来的一种框架,与MVC有一定的相似性。...MVP的变种有很多,其中使用最广泛的是Passive View模式,即被动视图。...)将完成的结果更新到UI层。...ioc模块 android中的ioc模块,完全注解方式就可以进行UI绑定、res中的资源的读取、以及对象的初始化。 数据库模块 android中的orm框架,使用了线程池对sqlite进行操作。...网络状态检测模块 当网络状态改变时,对网络状态进行检测。 afinal Android的快速开发框架 Afinal 是一个android的sqlite orm 和 ioc 框架。
:$data") } } observeState()第二个方法传入ui的引用就可,这样单个网络请求之前会自动加载Loading,成功或者失败自动取消Loading。...Repo,然后使用协程执行网络请求方法。...数据驱动ui,以LiveData为载体,将页面状态和网络结果通过在LiveData返回给ui。...obserState()方法第二个参数中传入了UI引用。 不能达到"看方法如其意",如果是刚接触,会有很多疑问:为什么需要一个livedata作为方法的参数。网络请求的返回值去哪了?...跟ui没任何关系,可以完全作为一个独立的Lib使用。
todo-mvp示例使用以下依赖关系: 常见的Android支持库 - com.android.support。*命名空间中的软件包提供向后兼容性和其他功能。...Android测试支持库 - 用于支持UI测试的框架,使用Espresso和AndroidJUnitRunner。 Mockito - 用于实施单元测试的框架。...这些方法使用URLConnection和AsyncTask在一个单独的线程内执行网络请求,然后通过回调将结果返回给Activity。...V 在需要进行数据操作逻辑的时候不自己做,而是交给 P 来做,P 完成之后调用 V 中的方法实现界面更新。 所以PRESENTER 的作用是承担业务逻辑和相应的UI逻辑。...Presenter 作为P,V向它请求数据,然后P再向M请求数据,通过回调得到数据之后在调用V进行界面的更新。 ? 看完发现,好像还真的是一大堆的接口啊!!!
教你如何使用ProtoBuf,通过gRPC服务在android上进行网络请求。...gRPC(Java)的Github主页: https://github.com/grpc/grpc-java 为什么要使用ProtoBuf和gRPC 简而言之,ProtoBuf就好比信息传输的媒介,类似我们常用的...gRPC 作为google公司极力推荐的分布式网络架构,基于HTTP2.0标准设计,使用用ProtoBuf作为序列化工具,在移动设备上表现更好,更省电和节省空间占用。google出品,品质值得信赖。...如何使用 像这种国外的开源框架,还是建议大家先直接阅读官方文档,再看国内的文章,这样才不容易被误导。...普通请求 在测试demo中的请求前,请务必先运行服务端的代码。
前言 Retrofit是现在比较流行的网络请求框架,可以理解为okhttp的加强版,底层封装了Okhttp。 准确来说,Retrofit是一个RESTful的http网络请求框架的封装。...因为网络请求工作本质上是由okhttp来完成,而Retrofit负责网络请求接口的封装。...,Retrofit将okhttp请求抽象成接口,使用注解来配置和描述网络请求参数。...请求方法注解 请求方法注解 说明 @GET get请求 @POST post请求 @PUT put请求 @DELETE delete请求 @PATCH patch请求,该请求是对put请求的补充,用于更新局部资源...Headers 用于添加固定请求头,可以同时添加多个,通过该注解的请求头不会相互覆盖,而是共同存在 @Header 作为方法的参数传入,用于添加不固定的header,它会更新已有请求头 请求参数注解
探索函数式编程 使用 Retrofit2 进行网络请求 开机自启动 Android 6.0 自定义文本操作栏 效果图: ?...技术点: 使用RxJava配合Retrofit2做网络请求 使用RxUtil对线程操作和网络请求结果处理做了封装 使用RxPresenter对订阅的生命周期做管理 使用AndroidEventBus来方便组件间的通信...使用Material Design控件和动画 使用MVP架构整个项目,对应于model、ui、presenter三个包 使用Realm做阅读记录和收藏记录的增、删、查、改 使用Glide做图片的处理和加载...技术点: 使用RxJava配合Retrofit2做网络请求 使用RxUtil对线程操作和网络请求结果处理做了封装 使用RxPresenter对订阅的生命周期做管理 使用RxBus来方便组件间的通信 使用...使用SVG及其动画实现progressbar的效果 使用RxPermissions做6.0+动态权限适配 使用Jsoup解析V2EX站点DOM 使用原生的夜间模式、分享、反馈 包含搜索、收藏、检测更新等功能
Android使用RxJava+Retrofit2+Okhttp+MVP练习的APP 项目截图 这是我的目录结构 五步使用RxJava+Retrofit2+Okhttp+RxCache 第一步:导包...return mRetrofit; } } 第五步:新建HttpData类 用于统一管理请求 /* * 所有的请求数据的方法集中地 * 根据MovieService的定义编写合适的方法...Android中也可以说采用了当前比较流行的MVC框架,在Android中: 1) 视图层(View):一般采用XML文件进行界面的描述,使用的时候可以非常方便的引入,但是用xml编写了,又需要在...3) 模型层(Model):对数据库的操作、对网络等的操作都应该在Model里面处理,当然对业务计算等操作也是必须放在的该层的。 MVP MVP 就是基于MVC 的模式上的一个演化版本。...而实质上,它既承担了View,同时也包含一些Controller的东西在里面。随着项目的迭代更新,这对开发很不友好,耦合度也原来越高,项目越来越难维护,而MVP 就是解决这样的痛点。
UI更新 (App启动白屏优化、适配Android10.0深色模式) 前言 正文 一、启动白屏优化 1. 样式文件 2. 修改页面 二、适配深色模式 1. 颜色 2. 样式 3....地图设置 三、源码 前言 在上一篇文章中完成了对记事本的功能增强,本篇文章中就着重来说一下UI方面的内容。先看看本篇文章的效果图 你也可以下载体验一下。...你会发现这里有一个value-night文件夹,它里面只有一个themes.xml,简单明了的说就是当你的手机系统打开了深色模式的开关,你的App就会自动去使用values-night下的资源文件,包括样式...是颜色,也就是colors.xml,深色模式下会使用values-night中的资源文件,因此我们需要在values-night下面也创建一个colors.xml。...两个资源的name一样,value不一样,也就是说正常情况下你的颜色是绿色,深色模式下就是黑色。 而在你的themes.xml中使用的就是这个colors.xml中的色值。 2.
MVP和MVC的区别仅仅在于P和Control,MVC中View和Model是互通的可以互相通信,在Android中View一般代表着我们的xml进行界面的描述,而对于模型Model部分则大多对应于本地的数据文件或网络获取的数据体...实现这个interface 编写Molde,里面的业务逻辑主要包括网络请求获取数据,数据库读取等耗时操作,通过M层回调给P层通知V层更新UI 编写Presenter,P层持有V和M的引用,实现P层的回调...,并且回调给V层更新 Activity中调用P执行业务逻辑,更新UI 具体代码就不贴了,相信了解过MVP的都会写基本的代码 但是问题也就出来了,由于P层需要和V层进行通信,更新UI时需要持有V层的view...Example 我们按照功能模块来构造我们的MVP,可能大家注意到了没有M层啊,是的,这里我把M层舍弃掉了,把业务逻辑、网络请求直接放在了P层,大大减少了类的数量,这样我们每个功能模块只需要新建一个View...继承了MVPActivity并实现了HomeView,同时将泛型对象设为我们的HomeView和HomePresenter,这样我们就可以直接调用P层的网络请求方法,同时也能回调更新UI package
领取专属 10元无门槛券
手把手带您无忧上云