Johnny Shieh

人如果没有梦想,跟咸鱼有什么分别


  • 首页

  • 分类

  • 归档

  • 标签

  • 读书

  • 小伙伴

  • 关于

  • 搜索

Java 泛型

发表于 2018-04-27 | 分类于 Java | | 阅读次数

Java 泛型是 Java 5 引入的一个重要特性,相信大多数 Java 开发者都对此不陌生,但是泛型背后的实现原理和类型擦除还是许多人依然不是很清楚。本文将介绍 Java 泛型的原理和使用,重点阐述容易产生困惑的通配符、类型擦除等问题。

1. Java 泛型

1.1 Java 泛型是什么?

Java 泛型,提供了参数化类型,并且提供了编译时强类型检查。泛型可以让我们很简单地支持不同类型,在 Java 集合框架中泛型广泛用以对类型的抽象。

1.2 Java 泛型的好处

  • 提供编译时的强类型检查。可以在编译时发现类型安全问题,不用等到运行时。

  • 避免类型转换。

阅读全文 »

Kotlin Coroutines(协程) 完全解析(一),协程简介

发表于 2018-04-17 | 分类于 Kotlin | | 阅读次数

Kotlin Coroutines(协程) 完全解析系列:

Kotlin Coroutines(协程) 完全解析(一),协程简介

Kotlin Coroutines(协程) 完全解析(二),深入理解协程的挂起、恢复与调度

Kotlin Coroutines(协程) 完全解析(三),封装异步回调、协程间关系及协程的取消

Kotlin Coroutines(协程) 完全解析(四),协程的异常处理

Kotlin Coroutines(协程) 完全解析(五),协程的并发

本文基于 Kotlin v1.3.0-rc-146,Kotlin-Coroutines v1.0.0-RC1

Kotlin 中引入 Coroutine(协程) 的概念,可以帮助编写异步代码,目前还是试验性的。国内详细介绍协程的资料比较少,所以我打算写 Kotlin Coroutines(协程) 完全解析的系列文章,希望可以帮助大家更好地理解协程。这是系列文章的第一篇,简单介绍协程的特点和一些基本概念。协程主要的目的是简化异步编程,那么先从为什么需要协程来编写异步代码开始。

Kotlin Coroutine 终于正式发布了,所以我跟进最新的正式版更新了本文相关内容

1. 为什么需要协程?

异步编程中最为常见的场景是:在后台线程执行一个复杂任务,下一个任务依赖于上一个任务的执行结果,所以必须等待上一个任务执行完成后才能开始执行。看下面代码中的三个函数,后两个函数都依赖于前一个函数的执行结果。

阅读全文 »

[译] Android Transition Animation 过渡动画解析

发表于 2018-04-03 | 分类于 Android | | 阅读次数

本文主要译自 lgvalle 的 Material-Animations 的 README.MD,文中的源码见 Material-Animations。

Android 4.4.2 中引入了 Transition 过渡动画,不过那时的 API 的功能比较简单,只能对整个 Activity 或 Fragment 做动画,Google 在 Android 5.0 的 Material Design 中引入更完整的 Transition 框架。Android 的过渡动画可以分为四个部分:

  1. Activity/Fragment 切换时的内容过渡动画(content transition)

  2. Activity/Fragment 切换时的共享元素过渡动画

  3. 同一个页面中的场景过渡动画

  4. 共享元素过渡动画 + 揭露效果(circular reveal)

阅读全文 »

Dagger 2 完全解析(六),dagger.android 扩展库的使用

发表于 2018-02-23 | 分类于 Android | | 阅读次数

Dagger 2 完全解析系列:

Dagger 2 完全解析(一),Dagger 2 的基本使用与原理

Dagger 2 完全解析(二),进阶使用 Lazy、Qualifier、Scope 等

Dagger 2 完全解析(三),Component 的组织关系与 SubComponent

Dagger 2 完全解析(四),Android 中使用 Dagger 2

Dagger 2 完全解析(五),Kotlin 中使用 Dagger 2

Dagger 2 完全解析(六),dagger.android 扩展库的使用

本系列文章是基于 Google Dagger 2.11-rc2 版本

在项目中使用了 dagger.android 扩展库后,体验到了其可以简化 Dagger 2 在 Android 项目中的使用,所以该系列的最后一篇文章解析 dagger.android 扩展库的使用及原理。本文以个人写的 Gank 项目 为例,逐步分析 dagger.android 扩展库的使用。

注:本文代码语言为 Kotlin。

1. Gank 项目中原来的 Dagger 2 依赖注入逻辑

Gank 项目中依赖关系比较简单,主要是提供一个单例的 GankService 依赖用于拉取 API 接口。依赖关系图如下:

阅读全文 »

2017 年终总结

发表于 2017-12-31 | 分类于 随笔 | | 阅读次数

365 天,250 个工作日,又这样匆匆过去了,我的 24 岁也成了过去式。总的来说,我的 2017 是充实而又孤单的一年。

工作上感觉比较充实,5 月份买了 johnnyshieh.me 域名,到年底半年多的时间访客数从零到六千多,一年中写了 29 篇文章,包括三个系列文章。基本每两周就会写一篇技术博客,而且开始写了三个系列文章,逐步记录了自己学习 Dagger 2 依赖注入、AspectJ 切面编程、单元测试的过程。工作上重构代码时实践了自己私下学习的 RxFlux 架构单向数据流分层架构,经过时间检验效果还不错。

阅读全文 »
1234…16
Johnny Shieh

Johnny Shieh

我本微末,心向天空

76 日志
13 分类
43 标签
GitHub Weibo Gmail 简书
  • 热门系列
  • Dagger 完全解析(6)
  • AspectJ in Android(3)
  • Kotlin 写 Android 单元测试(4)
  • Kotlin 协程完全解析(5)
© 2015 - 2019 Johnny Shieh
访客数 访问量