Android Architecture Component LiveData解析

Header

Android Architecture Component 是 Google 在 2017 年推出的一套帮助开发者解决 Android 架构设计的方案。里面有众多吸引人的亮点,比如 Lifecycle、ViewModel 和 LiveData 等组件的设计,确实是一款牛逼的架构。

今天主要来解析一下其中的 LiveData 是如何工作的。

LiveData 表示的是动态的数据,比如我们从网络上获取的数据,或者从数据库中获取的数据等,都可以用 LiveData 来概括。其中 setValue 方法是需要运行在主线程中的,而 postValue 方法是可以在子线程运行的。

阅读更多

Android Data Binding 入门

配置

新建一个 Project,确保项目 build.gradle 中的 Gradle 插件版本不低于 1.5.0-alpha1,比如我的 Demo 是 3.1.2 版本的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
buildscript {

repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'


// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
阅读更多

Android 通过 URI 获取文件路径

之前在工作的过程中,遇到不同 Android 版本下 URI 采用不同方式来获取文件路径的问题。

因为需求的原因,要求拍照上传或者从相册中选择图片上传,而且图片是需要经过压缩的,大小不能超过2M。

很快,拍照的这部分就搞定了。那么相册中选择图片的也是一样的道理,应该也是轻松解决了。

至于选择图片的代码,如下所示:

1
2
3
4
intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, FILE_CHOOSER_RESULT_CODE);
阅读更多

Android VirtualAPK 源码解析

Header

VirtualAPK 是滴滴开源的一款 Android 插件化的框架。

现在市面上,成熟的插件化框架已经挺多了,那为什么还要重新开发一款轮子呢?

  1. 大部分开源框架所支持的功能还不够全面
  2. 兼容性问题严重,大部分开源方案不够健壮
  3. 已有的开源方案不适合滴滴的业务场景

在加载耦合插件方面,VirtualAPK是开源方案的首选。

以上是滴滴给出的官方解释。

对于我们开发者来说,这种当然是好事。第一,我们选择插件化框架的余地变多了;第二,我们也可以多学习学习框架内部实现的原理,一举两得。

阅读更多

Android View 事件分发机制源码解析

注:本文解析的源码基于 API 25,部分内容来自于《Android开发艺术探索》。

Header

Android View 事件分发的机制可以说是 Android 开发者必知点之一,一般在面试的过程中肯定也有涉及。

事件分发可以说分为三个部分,

  • 一个是 Activity
  • 然后是 ViewGroup
  • 最后是 View

我们在分析事件分发时,也会依次按照这三个部分来入手。

Activity

先入手第一部分:Activity 。

阅读更多

Android Window 源码解析(四):Window 的删除机制

注:本文解析的源码基于 API 25,部分内容来自于《Android开发艺术探索》。

Header

这篇将是 Window 系列的最后一篇了,主要来讲讲 Window 删除的机制原理。

其实相对于 Window 的添加和更新来说,删除也是换汤不换药的。也是通过 WindowSession 和 WindowManagerService 来完成这个步骤的。

Window的删除机制

我们删除 Window 的代码:

阅读更多

Android Window 源码解析(三): Window 的更新机制

注:本文解析的源码基于 API 25,部分内容来自于《Android开发艺术探索》。

Header

本篇探究 Window 更新机制。其实 Window 的更新内部流程和添加 Window 并无什么差异,所以本篇可能会讲得比较简略。

但是还是值得我们去了解的,那么老死机开车了。

Window的更新机制

我们更新 Window 的代码:

阅读更多

Android Window 源码解析(一): DecorView

注:本文解析的源码基于 API 25,部分内容来自于《Android开发艺术探索》。

Header

今天我们来讲讲 Window ,Window 代表着一个窗口。

比如在 Activity 中,我们可以设置自定义的视图 View ,其实 View 并不是直接附着在 Activity 上,而是 View 附着在 Window 上,Activity 又持有一个 Window 对象。可见,Window 是一个重要的角色,主要用来负责管理 View 的。而 Window 和 View 又是通过 ViewRootImpl 来建立联系的。

阅读更多

Android Window 源码解析(二): Window 的添加机制

注:本文解析的源码基于 API 25,部分内容来自于《Android开发艺术探索》。

Header

而今天就要来详细了解 Window 的添加机制了,到底在 WindowManager.addView 中做了什么事情?我们一起来看看吧!!

Window的添加机制

上面我们看到了在 makeVisible() 中调用了 wm.addView(mDecor, getWindow().getAttributes()) 将 DecorView 视图添加到 Window 上。

阅读更多

Android View 的工作原理

注:本文分析的源码基于 Android API 25

View绘制的起点

WindowManagerGlobal

addView(View view, ViewGroup.LayoutParams params, Display display, Window parentWindow)

WindowManagerGlobaladdView(View view, ViewGroup.LayoutParams params, Display display, Window parentWindow) 方法中,创建了 ViewRootImpl 对象,将 ViewRootImplDecorView 相关联:

阅读更多