之前后台有人问https相关的问题,推荐一篇文章:
标题:Android安全开发之安全使用HTTPS http://www.cnblogs.com/alisecurity/p/5939336.html
该文对https的在Android端如何处理进行了详细的描述;并且阿里聚安全还有多篇安全相关的好文,如果有需要不妨关注一下。
本文由haohao投稿。 haohao的博客地址: http:///
一次简单的实践作为对 MVVM 认识的总结。
效果预览
准备知识
(1)MVC
视图层(View):用户界面。 控制器层(Controller):业务逻辑 模型层(Model):数据保存
View 层传送指令到 Controller 层 Controller 层完成业务逻辑后,要求 Model 层改变状态 Model 层将新的数据发送到 View层,使用户得到反馈
缺陷:View 层和 Model 层是相互可知,耦合性大,像 Activity 或者 Fragment 既在 Controller 层,又在 View 层,造成工程的可扩展性可维护性非常差。
(2)MVP
在 MVP 设计模式中,Controller 层变成了 Presenter 层。
MVP 模式各层之间的通信,都是双向的。 View 层与 Model 层不直接发生联系,都通过 Presenter 层进行间接通信。 Model 层与 Presenter 层,Presenter 层与 View 层之间通过接口建立联系。
采用 MVP 设计模式,Activity 与 Fragment 只位于 View 层。
MVP 的缺陷在于:由于我们使用了接口的方式去连接 View 层和 Presenter 层,这样就导致了特定场景下的一些问题,当你的页面逻辑很复杂的时候,你 View 层实现的接口会有很多,如果你的 App 中有很多个这样复杂的页面,维护接口的成本就会变的非常的大。
(3)MVVM
MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。 区别在于: View 层与 ViewModel 层通过DataBinding相互绑定,View 层的变动,自动反映在 ViewModel 层,反之亦然。
(4)RxJava
RxJava 在 GitHub 主页的介绍是:
https://github.com/ReactiveX/RxJava
RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.
一个在 Java VM 上使用可观测的序列来组成异步的、基于事件程序的库。 RxJava 本质上是一个异步操作库,是一个能让你用极其简洁的逻辑去处理繁琐复杂任务的异步事件库。 简而言之,RxJava 可以用几个关键字概括:简洁,队列化,异步。
(5)Retrofit
一个 Android 和 Java 上 HTTP 库(利用注解和 OKHttp 来实现和服务器的数据交互)。
Retrofit 基于 OKHttp 并引入注解,使用简单,易扩展,易维护。
https://github.com/square/retrofit Retrofit 官方文档: http://square./retrofit/
(6)DataBinding
https://developer./topic/libraries/data-binding/index.html
在Google IO 2015 中,Google 在 support-v7 中新增了 Data Binding,使用 Data Binding可以直接在布局的 xml 中绑定布局与数据,从而简化代码,Android Data Binding是Android 的 MVVM 框架。因为 Data Binding 是包含在 support-v7 包里面的,所以可以向下兼容到最低 Android 2.1 (API level 7+).
直接上代码。
依赖的第三方类库compile 'io.reactivex:rxjava:1.1.0'compile 'io.reactivex:rxandroid:1.1.0'compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'compile 'com.github.bumptech.glide:glide:3.7.0'
API
https://api.douban.com/v2/movie/top250?start=0&count=20
引入DataBindingandroid { ...... dataBinding { enabled = true }}
工程目录结构
(1)MVVM 之 View
MainActivity.java
getFragmentManager() .beginTransaction() .add(R.id.movie_fragment, MovieFragment.getInstance()) .commit();
activity_main.xml
MovieFragment.java
movie_fragment.xml
movie_item.xml
MovieAdapter.java
回调接口 CompletedListener.java public interface CompletedListener { void onCompleted();}
(2)MVVM 之 ViewModel
MainViewModel.java
MovieViewModel.java
(3)MVVM 之 Model
DouBanMovieService.java
RetrofitHelper.java
还有 entity 类,这里就不贴出来了。
详细源码: https://github.com/githubhaohao/MVVMRxJavaRetrofitSample
无论你是有 Java 基础希望学 Android 开发的程序员,还是想进一步提升能力的 Android 开发者,都可以在这个Udacity & Google 官方参与制作 的课程项目中找到适合自己的成长路径!
*独家硅谷技术课程 *行业领导者设计的实战项目 *一对一学习辅导 *名企颁发学习认证 *毕业直达滴滴面试
|