树先生の博客

更好的成为更好的你


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

Android-RxJava之背压学习

发表于 2019-08-05 | 分类于 Android |
字数统计: 7 | 阅读时长 ≈ 1
参考:Flowable背压支持
阅读全文 »

Android-ViewModel探究

发表于 2019-08-05 | 分类于 Android |
字数统计: 1.1k | 阅读时长 ≈ 5
ViewModel如何产生的?通常我们第一步都是通过ViewModelProviders.of()这个工具方法进行传入activity来获得。我们直接看源码 传入FragmentActivity 123public static ViewModelProvider of(@NonNull FragmentActivity activity) { return of(activity, null);} 走到重载方法 12345678public static ViewModelProvider of(@NonNull FragmentActivity activity, @Nullable Factory factory) { Application application = checkApplication(activity); if (factory == null) { factory = ViewModelProvider.Android ...
阅读全文 »

Jetpacak之Room

发表于 2019-08-05 | 分类于 Android |
字数统计: 2.6k | 阅读时长 ≈ 13

前言

google官方的数据库框架,可以无缝结合LiveData以及Rxjava结合使用。

文档:Romm doc

api详细:Room summary

基础使用步骤

引入依赖,开启androidx哦

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dependencies {
def room_version = "2.2.0-alpha01" // 2.1.0 for latest stable version

implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

// optional - Kotlin Extensions and Coroutines support for Room
implementation "androidx.room:room-ktx:$room_version"

// optional - RxJava support for Room
implementation "androidx.room:room-rxjava2:$room_version"

// optional - Guava support for Room, including Optional and ListenableFuture
implementation "androidx.room:room-guava:$room_version"

// Test helpers
testImplementation "androidx.room:room-testing:$room_version"
}
  • 定义实体类 - Entity
  • 定义Dao类 - Dao
  • 定义抽象数据库类 - Database
  • 使用
阅读全文 »

算法-排序算法复习

发表于 2019-08-03 | 分类于 算法 |
字数统计: 898 | 阅读时长 ≈ 3
冒泡排序描述:相邻间的元素两两比较,依次交换,从一端到另一端冒出最大值,循环冒出最大值,完成排序。N^2^ 选择排序描述:依次循环扫描出最大值,放在另一端。 插入排序描述:和打牌类似,依次遍历元素,将元素,插入到合适的位置。 希尔排序描述:插入排序的变体,插入排序是相邻交换,而希尔排序是间隔为k的,通过大间隔的插入排序,在锐减到k=1即默认的插入排序。 快速排序描述:分治思想,将一个数组分为两部分,中间是基准值,左边的都是比基准值小,右边都是比基准值大。然后对左区间和右区间执行同样的划分。最终划分到最小的时候,就完成了排序。 归并排序描述:分治思想,借用存储空间,将一个数组划分两部分,左边排序,右边排序,将两个区间合并成一个有序。通过分治思想,左右两个区间同样可以进行排序归并,最终划分到最小区间。依次向上合并成有序。 堆排序描述:堆是一种二叉树,使用最小堆,某节点总是小于其子节点,利用这个特性,进行构建堆,然后将最顶上的值和最后的数进行交换,然后将交换后的堆进行下沉而维持堆的结构,重复交换堆顶元素和堆尾元素,从而构建有序。 线索二叉树排序描述:利用BST的特性,父亲节点大于左节点,小于 ...
阅读全文 »

Android-MVVM之LiveData和ViewModel

发表于 2019-08-01 | 分类于 Android |
字数统计: 3.4k | 阅读时长 ≈ 13

前言

之前归纳了databinding,说到底databinding也只是承载实体数据和UI进行关联,以及它们之间互通,转换。但是呢们开发过程中需要有中间人来控制逻辑,连接后台数据到绑定数据。这个时候ViewModel加上DataBinding以及LiveData就可以很好的组成一种架构模式。我们还是在了解LiveData和ViewModel之后,再结合之前的DataBinding来说MVVM吧。

LiveData

老规矩,首先附上官方文档地址:LiveData

看看官方怎么定义LiveData的:

LiveData是一个可观察对象持有类,不同于平常的可观察对象,LiveData是有生命周期感知的,意味着它会关心app组件的生命周期,比如Activity,fragment,service。这种感知特性保证LiveData只会在生命周期活跃的时候进行观察更新。

LiveData考虑将观察者,在生命周期为started和resumed下保持活跃。LiveData仅仅会通知活跃的观察者进行更新,不活跃的观察者不会收到任何通知。

你可以注册观察者并且给他配对实现了LifecycleOwner 的接口的对象。在这层关系下,观察者会在Lifecycle对象进入destory时被移除,这个对于fragment和activity非常有用,它可以很安全的观察livedata对象,在fragment和activity生命周期销毁时,它们会立即解除订阅,不会产生内存泄漏。

阅读全文 »

Android-MVVM之DataBinding

发表于 2019-07-30 | 分类于 Android |
字数统计: 5k | 阅读时长 ≈ 23

MVVM一种android架构模式,谷歌官方架构中实现了,包括databinding,viewmodel,livedata,room,lifecycle,等一套用于mvvm架构的架构组件。

前言

整体学习MVVM之前,我们可以先来单独看看DataBinding是干嘛的

首先附上官方文档地址:Data Binding Library ,以及官方demo

官方是这么说的:

数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。

就像下面这样:

1
<TextView android:text="@{viewmodel.userName}" />

诶,好像似曾相识,对了,和那个jsp的el表达式,以及spring中表达式有点像啊。这样就好理解了,xml UI通过某种数据绑定,可以通过这种声明式将数据传到UI中。不得不说有点亲切,哈哈。我下面的写东西也基本上是总结(翻译233)官方文档,所以结构也是一样的。

阅读全文 »

设计模式归纳

发表于 2019-07-26 | 分类于 设计模式 |
字数统计: 3.2k | 阅读时长 ≈ 12

根据《Android源码设计模式解析与实战》总结归纳学习

面向对象的的六大原则

单一职责

一个类应该是一些相关性很高的函数和数据的集合。例如根据功能进行具体划分,每个个体完成自己相应的事。

开闭原则

开放扩展,关闭修改。在软件生命周期迭代过程中,如果对原有代码进行了修改,很有可能引入新的错误,导致整个项目需要重构,并且需要重新测试啥的。所有要通过扩展的形式来,而不是修改。

里氏代换

子类可以扩展父类功能,但不能改变原有父类的功能

依赖倒置

高层模块不依赖底层模块细节,应该依赖抽象。这个也就是申明使用抽象,实现使用细节。

接口隔离

客户端不应当依赖它不需要的接口,类之间的依赖关系应该建立在最小的接口上,不要将过多的功能加在一个接口上。接口的设计粒度越小,系统越灵活,维护降低

迪米特原则

一个类应该只和自己关心的类进行通信。最少知道原则,降低类与类之间的耦合。

阅读全文 »

Android-事件分发机制

发表于 2019-07-22 | 分类于 Android |
字数统计: 23 | 阅读时长 ≈ 1
从Activity:dispatchTouchEvent, 调用Window:dispatchTouchEvent, 调用DecorView:dispatchTouchEvent 调用ViewGroup:dispatchTouchEvent 参考:https://www.jianshu.com/p/d3758eef1f72
阅读全文 »

一篇搞懂AsynsTask

发表于 2019-07-17 | 分类于 Android |
字数统计: 1.6k | 阅读时长 ≈ 7

what

android 使用模板模式,封装用于执行异步任务。在android中通常情况下需要实现多线程任务以及UI的更新,但是UI通常情况下只能由UI线程来更新,我们一般简单点可能会使用handler啊,runOnUI方法啊,其实本质也是使用UI主线程的handler。但是写起来很好看不方便,所以android使用handler和线程池封装了一个用于执行异步的AsyncTask。

how

首先看看怎么用吧,巨简单。

阅读全文 »

Dagger2学习

发表于 2019-07-14 | 分类于 Android |
字数统计: 2.8k | 阅读时长 ≈ 12

What

关于IOC(控制反转)和DI(依赖注入),DI只是IOC的实现的一种方式,另一种是依赖查找,详细见 控制反转维基百科

完全静态的依赖注入框架。依赖注入的概念真的是到哪都有,以前学Spring的就天天看它,到了android还是跑不了,现在的dagger是以半静态注入的形式,说白了,通过注解处理器分析注解,生成java代码,将对象池和需要对象的地方连接起来,其实就和自己创键差不多,我就简单总结下怎么用吧(里面的概念我也挺晕乎的,注解处理器那里我也是挺头疼的。)

官网: Dagger users-guide (果然还是还是官方文档讲的好呃呃)

How

引入依赖

1
2
implementation 'com.google.dagger:dagger:2.20'
annotationProcessor 'com.google.dagger:dagger-compiler:2.20'
阅读全文 »
1234
hujie

hujie

慎独

34 日志
7 分类
7 标签
© 2019 — 2022 hujie
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4