自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

移动端开发干货分享

公众号「AndroidPub」| 字节面试官,收简历:programonkey@gmail.com

  • 博客(48)
  • 收藏
  • 关注

原创 var关键字的比较:Java10 VS Kotlin

Java10之后的一个重要变化是引入了var关键字,在Kotlin中我们对它已经很熟悉了,那么Java中的var和Kotlin有哪些不同呢?1. 声明初始化Kotlinkotlin中我们声明同时初始化时,可以省略变量类型,当然也可以不省略//省略var myVariable = 1//不省略var myVariable : Int = 1当我们声明和初始化分开时,必行指定类型...

2020-03-31 20:34:48 197

原创 Kotlin之契约Contracts

Kotlin的Contracts是1.3引入的新功能,虽然还是试验阶段,但是在Kotlin stdlib中已经很多地方(例如各种作用域函数)在用了,所以已经是比较stable的状态了。这篇文章带大家学习一下Contracts的使用Contracts能做什么?As smart as the compiler is, it doesn’t always come to the best con...

2020-03-31 00:45:41 707

原创 【Flutter】使用PlatformView显示WebView

通过PlatformView实现Flutter插件,能够调用和显示Android的WebView等Native控件

2020-03-28 15:15:09 3757

原创 Flutter常用命令整理

平日使用Android Studio等IDE进行flutter开发,不会直接使用flutter命令。 未来难免会出现写一些脚本的需求,所以整理了一下flutter的常用命令环境搭建$ flutter doctor进行flutter环境诊断,比如有没有缺少安装的东西等。当flutter不能启动时,试试这个$ flutter upgrade更新Flutter SDK 以及依赖包,在应用程序...

2020-03-26 21:11:37 3168

原创 RxJava学习神器 - RxMarbles

ReactiveX在Java开发中RxJava已经是首选的Stream处理框架。RxJava是ReactiveX的Java平台实现,各种ReactiveX实现库虽然支持的语言不同,但是运行机制都是一样的,很多Steam操作符也是通用的。RxMarblesStream操作符往往是大家学习RxJava的门槛,虽然RxJava在Javadoc中贴心地给出了示意图,但有时候仍然不够形象。...

2020-03-26 18:42:20 334

原创 【Flutter】pubspec.yaml中的版本管理

flutter项目使用pubspec.yaml进行依赖管理,其中对于依赖库的版本设置的方法比较灵活,设置不当可能会出现错误,这里集中整理一下:不指定版本 or any对版本无要求,此时默认会优先依赖最新版本# pubspec.yamldependencies: rxdart: # 任意版本OK provider: any # 任意版本OK需注意,从性能上考量并...

2020-03-26 13:45:27 2662

原创 Kotlinx.serialization VS Gson

JSON is an open-standard file format or data interchange format that uses human-readable text to transmit data objects consisting of attribute-value pairs and array data types.Java中常见的JSON解析库有Moshi...

2020-03-25 01:13:50 1690

原创 Kotlin/Native MPP Demo例子

kotlinconf-app 是KotlinConf的官方APP。All pieces of the application are implemented in Kotlin. Backend, frontend and mobile apps are Kotlin applications. Yes, Kotlin is powering all parts of the story....

2020-03-24 00:20:29 427

原创 Kotlin/Native开发环境搭建

Kotlin/Native is a technology for compiling Kotlin code to native binaries, which can run without a virtual machine. It is an LLVM based backend for the Kotlin compiler and native implementation of t...

2020-03-23 00:39:09 1559

原创 LiveData.observe在Kotlin中的优化

通过Kotlin的扩展函数优化LIveData的observe的使用

2020-03-22 20:30:42 3916

原创 本地编译AndroidX源码

在本地编译修改AndroidX源码,可以像Github其他开源项目一样,引用经过自定义的AndroidX

2020-03-22 13:53:54 3709

原创 深入理解ActivityResultContracts--替代startActivityForResult的新玩法

ActivityResultContract是 Activity 1.2.0-alpha02 和 Fragment 1.3.0-alpha02 中新追加的API,可以更加方便且typeSafe地处理startActivityForResult。如何使用AppCompatActivity和Fragment中可以通过prepareCall()创建launcher,然后调用launch(inte...

2020-03-21 21:40:57 13346 2

原创 【Android】使用ViewTreeLifecycleOwner获取Lifecycle

ViewTreeLifecycleOwner是什么?ViewTreeLifecycleOwner是View的一个扩展方法,可以通过View获取一个最近的Fragment或者Activity的LifecycleOwner。view.findViewTreeLifecycleOwner()实现原理?ComponentActivity通过ViewTreeLifecycleOwner.s...

2020-03-21 11:52:39 7667 5

原创 【Android】使用LiveData KTX Builder让代码更简洁

lifecycle-livedata-ktx中提供了通过Builder创建LiveData的方式, 可以方便的配合suspend函数的调用。引入livedata-ktximplementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0-rc03"不使用 LiveData BuilderViewModel // 定义Mut...

2020-03-21 01:52:41 2388 3

原创 【Android】Fragment将废弃onActivityCreated

androidX的fragment刚发布了最新版本1.3.0-alpha2 androidx.fragment:fragment:1.3.0-alpha02 androidx.fragment:fragment-ktx:1.3.0-alpha02其中带来几个重要更新:支持Activity Result APIsAdded support for the ActivityResult...

2020-03-20 00:43:33 7261 1

原创 【Android】ViewModel KTX对Coroutine的支持

androidx.lifecycle:lifecycle-viewmodel-ktx是ViewModel的KTX扩展库,可以让我们在ViewModel中方便的使用Coroutine。对于ViewModel-KTX的使用,我们需要关注以下三个知识点:ViewModelScope的使用suspend函数的调用Flow的订阅接下来通过一个MVVM架构的示例,围绕上面这三点进行一个简单介绍。...

2020-03-19 00:59:59 2800

原创 从函数式编程到声明式UI

1.声明式UI的现状早期的前端UI一直使用HTML+CSS+JavaScript这一经典的开发范式。HTML和CSS负责页面的布局和样式,JavaScript负责逻辑,命令式地操作Dom完成各种行为。之后不断涌现出的JQuery等各种组件库,也只是围绕Dom的操作进行了一些封装,并没用改变这种命令式操作Dom的模式。直到React的出现,创造性地提成了声明式UI的概念才彻底颠覆了命令式的开发...

2020-03-14 13:40:54 2960

原创 使用Jetpack Security为数据加密

Jetpack Security 是什么?Jetpack Security 是 Google I/O 2019 发布的安全组件库。Security构成简单,主要包含EncryptedFile和EncryptedSharedPreferences两个类,分别用来对File和SharedPreferences的读写进行加密解密处理。Security要求min SDK version 23。E...

2020-03-12 22:52:07 1387 1

原创 RxRedux - Android端的Redux框架

Android端先后出现了MVC、MVP、MVVM等多种应用架构,这些架构都是发源于Web前端开发而后被移动端借鉴和采用。近几年随着React等前段框架的兴起,Redux这种新的基于单向数据流的应用架构开始流行起来。Redux也会像前面几种MVX一样,从逐渐从前端出现到移动端,本文介绍的RxRedux便是一个Android端的Redux实现ReduxRedux是一个便于在React等声明式U...

2020-03-12 01:10:24 1747

原创 kotlinx.serialization处理Json解析

Kotlin官方的序列化库,具有以下特点:可以基于@serializable编译器生成序列化代码从而避免反射支持 JSON,CBOR, Protobuf等多种格式可以用于Kotln MPP项目,支持跨平台使用

2020-03-11 01:25:11 9023

原创 Android Studio 3.6 查看layout文件源码

Android Studio 3.6正式版已经发布https://android-developers.googleblog.com/2020/02/android-studio-36.html增加了新功能的同时,对原有功能有一些调整。例如 3.5 我们可以对layout文件的预览和源码进行切换:3.6 中上面的不见了,移到了右上角:...

2020-03-10 19:56:46 4655

原创 git merge 与 rebase

git中做跨分支的功能合并时常用到两个命令:merge和rebasemerge将A分支的修改合并到B分支;基于A分支最新Commit与B分支最新Commi生成新Commit,head移动到新的commit从两个分支的最近公共节点开始到新生成的Commit之间进行diff,如果有冲突,则手动解决随着最新commit提交merge后,A分支的commit和B分支的commit的hash不变...

2020-03-09 20:20:22 453

原创 Android开发现状分析(2020版)

进入2020年,Android生态也发生了不少变化,从一个多年Android经验者的角度分析Android的开发现状,不喜勿碰。KotlinKotlin已经成为Android开发的官方语言,Android的新的文档和Sample代码都开始转向Kotlin,在未来Java将加速被Kotlin替代。https://developer.android.com/kotlinKTXKTX是Ko...

2020-03-07 22:32:00 9218 4

原创 【Android】Dagger2 + MVVM

背景一个标准的Android的MVVM架构是分层规划实现的,各层之间有清晰的依赖关系。借助Dagger2完成MVVM各层所需的依赖注入,可以让项目结构变得更清爽和更可维护。虽然Dagger2有一定使用门槛,但是MVVM的项目结构大都相同,实现一个Dagger2+Retrofit2(+OkHttp3)+ViewModel 的最小构成实践,对其他类似项目具有一定参考意义。构成1. g...

2020-03-07 19:43:25 2083 2

原创 【Dagger】Component.Factory与Component.Builder的使用对比

Dagger 2.22 起引入了 @Component.Factory 可以取代@Component.Builder的使用,Factory在许多场景的上的使用相对于Builder会更简单。本文用对比的方式介绍@Component.Factory与 @Component.Builder在使用上的区别。依赖版本implementation 'com.google.dagger:dagger:...

2020-03-07 18:06:50 1559 2

原创 使用Kotlin写Gradle

现在Gradle也支持Kotlin了,很多人本来就使用Kotlin开发Android,现在用一种语言同时可以把build脚本的工作也做了,可谓一举两得。Kotlin DSLDSL即Domain-Specific Language。Kotlin与Groovy一样是DSL友好的语言,所以很适合用于Gradle脚本编写。Kotlin版本的Gradle文件后缀会发生变化, ks即Kotlin S...

2020-03-07 11:28:50 3240 4

原创 使用Ktor进行HTTP请求

Ktor是什么?Ktor 这是一个 Kotlin 官方打造的 Web 框架,除了提供 HTTP 服务外,Ktor 还为和客户端提供了配套的库,用来进行 HTTP 请求。当然我们已经有Retrofit等其他库完成类似功能,但是作为Kotlin亲儿子,Ktor与Coroutine的搭配更加天衣无缝。接下来我们通过一个小例子学习一下Ktor在Android上的使用。gradleRetrof...

2020-03-06 22:29:42 3418

原创 Android Studio 3.6 设置 Gradle Offline Mode

Android Studio 3.5.3之前我们设置Gradle的Offline:Android Studio 3.6 之后同样的位置已找不到设置选项了。经过一番摸索,找到了新的位置:View > Tool Windows > Gradletoggle 一下 就可以切换Gradle的Offline,应该说是变得更方便了呢...

2020-03-06 00:00:52 2583

原创 LiveData与RxJava比较

RxJava和LiveData都是在Android Architecture Components推荐使用的库,LiveData相对RxJava出现较晚,相当于轻量版的RxJava。两个库在功能角色上有重叠,所以我们通过与RxJava的对比,视图让大家了解LiveData的使用场景。LiveData无法处理异LiveData本身的设计理念比较简单,无法像RxJava那样在一个strem同时...

2020-03-05 18:13:03 5117 2

原创 面向Kotlin与Java开发者的Dart快速入门(十四)Typedef、Metadata

Typedef可以理解成Kotlin中typealias的函数限定版,只能用来对函数定义别名。typedef GestureTapDownCallback = void Function(TapDownDetails details);定义还可以携带泛型typedef Compare<T> = int Function(T a, T b);int sort(int a,...

2020-03-05 02:35:44 295

原创 面向Kotlin与Java开发者的Dart快速入门(十三)注释

Dart的注释用法与Java大体相同。单行注释final hoge = 0; // 到行末都是注释内容多行注释与Java一样/**/void main() { /* * This is a lot of work. Consider raising chickens. Llama larry = Llama(); larry.feed(); larr...

2020-03-05 02:35:35 223 1

原创 面向Kotlin与Java开发者的Dart快速入门(十二)异步与并发

异步编程Dart可以像C#或Javascript那样可以通过 async/await 实现异步逻辑Future与async/await与Js的async/awiat是Promise的语法糖一样,Dart的async/awiat只不过是Future的语法糖,可以帮助我们的用同步的代码处理Future提高可读性。脱离async/await,Future本身的API仍然可以完成异步逻辑。Fu...

2020-03-05 02:35:27 286

原创 面向Kotlin与Java开发者的Dart快速入门(十一)库与导入(import)

Library的导入import关键字导入Libraryimport 'dart:html';Library的URI通过URI导入一个Library根据library的种类不同,URI前缀scheme不同:Dart标准库… dart:xxx三方库(通过包管理器提供的库,如pub工具)… package:xxxFlutter的Library中也有三方库import '...

2020-03-05 02:35:18 289

原创 面向Kotlin与Java开发者的Dart快速入门(十)泛型

整体上与Java的泛型相似,有少许区别运行时持有类型信息Java的泛型的类型信息在运行时会丢弃,Dart则一直保持到运行时,可以动态check泛型信息final strList = <String>[ "hoge", "fuga", "moge"];assert(strList is List<String>);泛型上下界跟Java一样, <...

2020-03-05 02:35:06 248

原创 面向Kotlin与Java开发者的Dart快速入门(九)静态变量、枚举

静态变量、方法静态变量、方法的定义与使用与Java中完全相同,同样使用static关键字,同样不用通过实例调用。如果是一个广泛使用的静态方法,建议使用top-level方法替代静态方法,我们在Kotlin的编码规范中往往也是这样要求的。一个疑问Dart2官方有以下一段文字You can use static methods as compile-time constants. Fo...

2020-03-05 02:34:55 336 1

原创 面向Kotlin与Java开发者的Dart快速入门(八)继承与Mixins

隐式接口Java中我们总是把接口和抽象类放到一起理解:接口是极致抽象的抽象类。Dart中接口和类是统一的,每个类同时也是一个接口:没有interface关键字,声明class的同时隐式地创建同名接口类中的非私有的成员可以通过接口对外暴露,但需要被实现与Java一样,使用implements 关键字实现接口抽象类同样具有隐式接口// Person声明的同时,创建同名接口,内有方法...

2020-03-05 02:34:37 549

原创 面向Kotlin与Java开发者的Dart快速入门(七)类的成员方法

成员方法与Java的成员方法无论在定义或是调用上没有区别。惟一的区别是Dart的成员方法无法重载,但是有可选参数的加持,也没有大问题getter/setterDart的getter/setter与Kotlin的类似,但是没有backing filed的概念,所有没有filed变量用来存储数据,需要自己声明一个私有变量来充当所谓的backing fieldclass Rect { ...

2020-03-05 02:34:20 197

原创 面向Kotlin与Java开发者的Dart快速入门(六)类与实例化

类(Class)与Java相同,Dart中所有的类都是Object的子类。与Java和Kotlin一样,this关键字指向当前实例,Dart的代码风格建议省略this,仅在名称冲突等必要的时候使用。Dart1的对象实例化与Java一样使用new关键字,Dart2开始可以向Kotlin一样不使用new创建实例实例通过instance.runtimeType可以获取一个类型对象,相当于Jav...

2020-03-05 02:33:56 315

原创 面向Kotlin与Java开发者的Dart快速入门(五)流程控制、异常处理

Dart的流程控制(Control flow)、异常控制(Exception)等处理

2020-03-05 02:33:45 210

原创 面向Kotlin与Java开发者的Dart快速入门(四)操作符、运算符

Dart的操作符 运算符等介绍

2020-03-05 02:33:35 296

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除