• 1. 安卓开发框架及常用技术分析
  • 2. 常用框架结构Mvc MVC,Model View Controller,是软件架构中最常见的一种框架,简单来说就是通过controller的控制去操作model层的数据,并且返回给view层展示,具体见下图 当用户出发事件的时候,view层会发送指令到controller层,接着controller去通知model层更新数据,model层更新完数据以后直接显示在view层上,这就是MVC的工作原理。
  • 3. Mvc结构
  • 4. MVPMVP作为MVC的演化,解决了MVC不少的缺点,对于Android来说,MVP的model层相对于MVC是一样的,而activity和fragment不再是controller层,而是纯粹的view层,所有关于用户事件的转发全部交由presenter层处理。下面还是让我们看图
  • 5. Mvp结构
  • 6. 从图中就可以看出,最明显的差别就是view层和model层不再相互可知,完全的解耦,取而代之的presenter层充当了桥梁的作用,用于操作view层发出的事件传递到presenter层中,presenter层去操作model层,并且将数据返回给view层,整个过程中view层和model层完全没有联系。
  • 7. MVVMMVVM最早是由微软提出的 MVVM在Android上对应data binding,MVVM最先使用在WPF中,通过ViewModel和View的映射,完成了View和Model的双向绑定. View的事件直接传递到ViewModel,ViewModel去对Model进行操作并接受更新.进而反馈到View上. 因为ViewModel与View的耦合,MVVM有一个缺点就是View的复用问题, 因为去掉了Presenter,View层依然过重.
  • 8. Mvvm框架结构图
  • 9. Mvvm框架使用方法.官方支持的方式 新建一个 Project 修改 Project 的 build.gradle,为 build script 添加一条依赖,Gradle 版本为 1.2.3。 为用到 Data Binding 的模块添加插件,修改对应的 build.gradle。 apply plugin: 'com.android.databinding‘ 布局文件 使用 Data Binding 之后,xml的布局文件就不再单纯地展示 UI 元素,还需要定义 UI 元素用到的变量。所以,它的根节点不再是一个 ViewGroup,而是变成了 layout,并且新增了一个节点 data。 ....
  • 10. 要实现 MVVM 的 ViewModel 就需要把数据与UI进行绑定,data 节点就为此提供了一个桥梁,我们先在 data 中声明一个 variable,这个变量会为 UI 元素提供数据(例如 TextView 的 android:text),然后在 Java 代码中把”后台”数据与这个 variable 进行绑定。 如果要用一个表格来展示用户的基本信息,用 Data Binding 应该怎么实现呢? 数据对象 添加一个 POJO 类 - User,非常简单,四个属性以及他们的 getter 和 setter。
  • 11. 绑定 Variable 修改 BasicActivity 的 onCreate 方法,用 DatabindingUtil.setContentView() 来替换掉 setContentView(),然后创建一个 user 对象,通过 binding.setUser(user) 与 variable 进行绑定。 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityBasicBinding binding = DataBindingUtil.setContentView( this, R.layout.activity_basic); User user = new User("fei", "Liang"); binding.setUser(user); }
  • 12. 常用第三方工具介绍Eventbus EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。 1、下载EventBus的类库 源码:https://github.com/greenrobot/EventBus
  • 13. 使用步骤: 在要接收消息的页面注册: eventBus.register(this); (3)发送消息 eventBus.post(new AnyEventType event); (4)接受消息的页面实现(共有四个函数,各功能不同,这是其中之一,可以选择性的实现,这里先实现一个): public void onEvent(AnyEventType event) {} (5)解除注册 [java] view plain copy print? eventBus.unregister(this);  
  • 14. 图片管理篇Android 开源框架Universal-Image-Loader 1.多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等 格式: String imageUri = "http://site.com/image.png"; // 网络图片   String imageUri = "file:///mnt/sdcard/image.png"; //SD卡图片   String imageUri = "content://media/external/audio/albumart/13"; // 媒体文件夹  (content provider) String imageUri = "assets://image.png"; // assets   String imageUri = "drawable://" + R.drawable.image; //  drawable文件    2.支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置 3.支持图片的内存缓存,文件系统缓存或者SD卡缓存 4.支持图片下载过程的监听 5.根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存 6.较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片 7.提供在较慢的网络下对图片进行加载
  • 15. Universal-Image-Loader结构图
  • 16. 使用方法初始化: ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( context).threadPriority(Thread.NORM_PRIORITY - 2) .discCacheSize(50 * 1024 * 1024) .memoryCacheSize(pixMemory * 1024 * 1024) .memoryCache(new LruMemoryCache(pixMemory * 1024 * 1024)) .build(); ImageLoader.getInstance().init(config); 异步加载图片 ImageLoader.getInstance().displayImage(imageUrl, imageView, options, listener);