Kotlin协程实现原理:Suspend&CoroutineContext

2020-11-19
阅读 7 分钟
7.8k
今天我们来聊聊Kotlin的协程Coroutine。如果你还没有接触过协程,推荐你先阅读这篇入门级文章What? 你还不知道Kotlin Coroutine?如果你已经接触过协程,相信你都有过以下几个疑问:协程到底是个什么东西?协程的suspend有什么作用,工作原理是怎样的?协程中的一些关键名称(例如:Job、Coroutine、Dispatcher、Coroutine...

动态代理分析与仿Retrofit实践

2020-10-29
阅读 9 分钟
3.7k
我们一直都在使用Retroift,都知道它的核心是动态代理。例如在之前的文章重温Retrofit源码,笑看协程实现中也简单提及到动态代理(来填之前挖的坑...)。咳咳,大家不要关注起因,还是要回归当前的内容。这次主要是来分析一下动态代理的作用与实现原理。既然都已经分析了原理,最后自然也要动手仿照Retrofit来简单实现一个...

重温Retrofit源码,笑看协程实现

2020-09-22
阅读 12 分钟
4.7k
最近回归看了一下Retrofit的源码,主要是因为项目接入了协程,所以想研究一下Retorift是如何支持协程的。Retrofit是在Version 2.6.0开始支持协程的,所以本篇文章有关Retrofit的源码都是基于2.6.0的。

Android Startup实现分析

2020-09-11
阅读 13 分钟
4.1k
Android Startup提供一种在应用启动时能够更加简单、高效的方式来初始化组件。开发人员可以使用Android Startup来简化启动序列,并显式地设置初始化顺序与组件之间的依赖关系。 与此同时,Android Startup支持同步与异步等待、手动控制依赖执行时机,并通过有向无环图拓扑排序的方式来保证内部依赖组件的初始化顺序。

我为何弃用Jetpack的App Startup?

2020-08-05
阅读 7 分钟
7k
最近Jetpack又添加了新成员App Startup,官方声明这是一个在Android应用启动时,针对初始化组件进行优化的依赖库。本人第一次听到后非常高兴,因为自己负责的项目在启动时需要初始化的东西实在是太多,而且有点杂乱无章,都耦合在一起了。对于可以异步初始化的组件也没有进行异步处理,而对于已经处理过的异步组件它们之...

Android Hilt实战初体验: Dagger替换成Hilt

2020-07-17
阅读 7 分钟
6.9k
在组件化AwesomeGithub项目中使用了Dagger来减少手动依赖注入代码。虽然它能自动化帮我们管理依赖项,但是写过之后的应该都会体会到它还是有点繁琐的。项目中到处充斥着Component,这让我想起了传统MVP模式的接口定义。

从零开始的Flutter之旅: MethodChannel

2020-07-13
阅读 7 分钟
6.7k
往期回顾 从零开始的Flutter之旅: StatelessWidget 从零开始的Flutter之旅: StatefulWidget 从零开始的Flutter之旅: InheritedWidget 从零开始的Flutter之旅: Provider 从零开始的Flutter之旅: Navigator 在flutter_github有这么一个场景:通过authorization认证方式进行登录。而authorization的具体登录形式是,通过跳...

从零开始的Flutter之旅: Navigator

2020-06-28
阅读 8 分钟
3.2k
往期回顾 从零开始的Flutter之旅: StatelessWidget 从零开始的Flutter之旅: StatefulWidget 从零开始的Flutter之旅: InheritedWidget 从零开始的Flutter之旅: Provider 这篇文章是从零开始系列的第五期,前面我们讲到了Widget与结合数据共享的Provider处理。 这次我们接着来了解一下路由导航Navigator的相关信息。 Flutt...

从零开始的Flutter之旅: Provider

2020-06-22
阅读 8 分钟
3.6k
往期回顾 从零开始的Flutter之旅: StatelessWidget 从零开始的Flutter之旅: StatefulWidget 从零开始的Flutter之旅: InheritedWidget 在上篇文章中我们介绍了InheritedWidget,并在最后引发出一个问题。 虽然InheritedWidget可以提供共享数据,并且通过getElementForInheritedWidgetOfExactType来解除didChangeDependenc...

从零开始的Flutter之旅: InheritedWidget

2020-06-09
阅读 5 分钟
4.2k
往期回顾 从零开始的Flutter之旅: StatelessWidget 从零开始的Flutter之旅: StatefulWidget 在之前的文章中,介绍了StatelessWidget与StatefulWidget的特性与它们的呈现原理。 这期要聊的是它们的另一个兄弟InheritedWidget。 特性 InheritedWidget是Flutter中的一个非常重要的功能组件,它能够提供数据在widget树中从上...

从零开始的Flutter之旅: StatefulWidget

2020-03-16
阅读 7 分钟
4.3k
往期回顾 从零开始的Flutter之旅: StatelessWidget 在之前的文章中,我们介绍了StatelessWidget的特性与它在Flutter中的呈现原理。 这次我们接着来聊聊它的兄弟StatefulWidget,俗称有状态小部件。 特性 如果你看了我之前的文章,你可能已经非常熟悉无状态小部件StatelessWidget。它们是由一个蓝图与不可变的element配置...

从零开始的Flutter之旅: StatelessWidget

2020-03-07
阅读 5 分钟
6.7k
小部件是Flutter应用程序的基本构建模块,每一个都是不可变的声明,也是用户界面的一部分。例如button,text,color以及布局所用到的padding等等。

AwesomeGithub组件化探索之旅

2020-01-31
阅读 17 分钟
4.8k
之前一直听说过组件化开发,而且面试也有这方面的提问,但都未曾有涉及具体的项目。所以就萌生了基于Github的开放Api,并使用组件化的方式来从零搭建一个Github客户端,起名为AwesomeGithub。

Android Navigation的四大要点你都知道吗?

2019-10-28
阅读 14 分钟
8.3k
在JetPack中有一个组件是Navigation,顾名思义它是一个页面导航组件,相对于其他的第三方导航,不同的是它是专门为Fragment的页面管理所设计的。它对于单个Activity的App来说非常有用,因为以一个Activity为架构的App页面的呈现都是通过不同的Fragment来展示的。所以对于Fragment的管理至关重要。通常的实现都要自己维护...

WorkManager从入门到实践,有这一篇就够了

2019-08-15
阅读 9 分钟
12.3k
前言 上一次我们对Paging的应用进行了一次全面的分析,这一次我们来聊聊WorkManager。 如果你对Paging还未了解,推荐阅读这篇文章: Paging在RecyclerView中的应用,有这一篇就够了 本来这一篇文章上周就能够发布出来,但我写文章有一个特点,都会结合具体的Demo来进行阐述,而WorkManager的Demo早就完成了,只是要结合...

Paging在RecyclerView中的应用,有这一篇就够了

2019-07-31
阅读 10 分钟
8.2k
前言 AAC是非常不错的一套框架组件,如果你还未进行了解,推荐你阅读我之前的系列文章: Android Architecture Components Part1:Room Android Architecture Components Part2:LiveData Android Architecture Components Part3:Lifecycle Android Architecture Components Part4:ViewModel 经过一年的发展,AAC又推出了...

只需三步实现Databinding插件化

2019-07-17
阅读 9 分钟
4.6k
首先为何我要实现Databinding这个小插件,主要是在日常开发中,发现每次通过Android Studio的Layout resource file来创建xml布局文件时,布局文件的格式都没有包含Databinding所要的标签<layout>。导致的问题就是每次都要重复手动修改布局文件,添加<layout>标签等。

What? 你还不知道Kotlin Coroutine?

2019-06-28
阅读 7 分钟
7.5k
今天我们来聊聊Kotlin Coroutine,如果你还没有了解过,那么我要提前恭喜你,因为你将掌握一个新技能,对你的代码方面的提升将是很好的助力。

Android Gradle系列-进阶篇

2019-06-10
阅读 6 分钟
6.5k
上篇文章我们已经将Gradle基础运用介绍了一遍,可以这么说,只要你一直看了我这个Gradle系列,那么你的Gradle也将过关了,应对正常的工作开发已经不成问题了。

Gradle系列-运用篇

2019-05-30
阅读 10 分钟
4.5k
在app module下的gradle.build中都有一个android闭包,主要配置都在这里设置。例如默认配置项:defaultConfig;签名相关:signingConfig;构建变体:buildTypes;产品风格:productFlavors;源集配置:sourceSets等。

Android Gradle系列-原理篇

2019-05-17
阅读 8 分钟
5.3k
上周我们在Android Gradle系列-入门篇文章中已经将gradle在项目中的结构过了一遍。对于gradle,我们许多时候都不需要修改类似与*.gradle文件,做的最多的应该是在dependencies中添加第三方依赖,或者说修改sdk版本号,亦或者每次发版本改下versionCode与versionName。即使碰到问题也是直接上google寻找答案,而并没有真...

Gson与List<T>对象间的相亲之旅

2019-05-10
阅读 5 分钟
4.6k
随着人们的生活水平的提高,连带着人与人之间的相亲渠道也进一步改善。最近偶尔看到几档相亲的综艺节目,不管是平民还是明星。可见相亲的热潮正扑面而来。这不Google与Java两个老家伙也坐不住了,分别想着自己排行285的儿子Gson与自己排行570的女儿List<T>也该到了相亲的年龄了。于是Google与Java两个老油条会心一...

Android Gradle系列-入门篇

2019-05-07
阅读 5 分钟
4.8k
接下来的一段时间会对Android Gradle的相关知识进行梳理,所以借此整理成一个系列。如果你是刚入行的新秀,那么这个系列将会非常适合你,因为Android基本的配置都与Gradle有关。当然如果你已经入行,但对Gradle还是停留在表面的认知上,这个系列也会对你有所帮助。

Vue:scoped与module的使用与利弊

2019-01-24
阅读 6 分钟
8.1k
一个web应用是离不开html、css与js,其中css充斥的整个web项目中。css它有一个特定,它是全局的。这样的特性导致的结果是,一旦你在不同的地方定义了相同的css命名,那么它们的样式就会相互覆盖,最终导致的style错乱,从而影响整个网页布局。

React Native Fetch封装那点事...

2018-08-29
阅读 5 分钟
10.3k
每一门语言都离不开网络请求,有自己的一套Networking Api。React Native使用的是Fetch。 今天我们来谈谈与Fetch相关的一些事情。

5分钟吃透React Native Flexbox

2018-08-26
阅读 6 分钟
13.2k
今天我们来聊聊Flexbox,它是前端的一个布局方式。在React Native中是主流布局方式。如果你刚刚入门React Native,或者没有多少前端的技术经验,亦或者对其半知半解,那么这篇文章将很好的帮助你参透Flexbox的整个全貌。

ViewDragHelper之手势操作神器

2018-08-23
阅读 4 分钟
10.3k
在Android中避免不了自定义ViewGroup,来实现我们原生控件所不能满足的需求。尤其是复杂的ViewGroup实现,手势的处理是避免不了的。我们要针对不同的ViewGroup来实现不同的onInterceptTouchEvent与onTouchEvent事件等。

自定义Android注解Part3:绑定

2018-07-12
阅读 4 分钟
3.1k
经过前面的了解,我们三大部分:butterknife-annotations、butterknife-compiler与butterknife-bind。现在就剩下最后一部分butterknife-bind。该部分是对我们前面定义的注解变量与自动生成的代码进行绑定,即调用我们自动生成的代码。

自定义Android注解Part2:代码自动生成

2018-07-10
阅读 12 分钟
5.5k
上一期我们已经把butterknife-annotations中的注解变量都已经定义好了,分别为BindView、OnClick与Keep。

自定义Android注解Part1:注解变量

2018-07-03
阅读 5 分钟
6.2k
对于Android注解,或多或少都有一点接触,但相信大多数人都是在使用其它依赖库的时候接触的。因为有些库如果你想使用它就必须使用它所提供的注解。例如:ButterKnife、Dagger2、Room等等。