android kotlin 简书,Kotlin Android开发

Kotlin一些特性

var: 变量,val:常量

定义变量时,可在类型后面加一个问号?,表示该变量是Nullable,不加表示该变量不可为null

扩展(好神奇)

继承--有点不明白为什么有的类继承的时候需要实例化

object: 类似java的匿名内部类

companion:Kotlin给Java开发者带来最大改变之一就是废弃了static修饰符。与Java不同的是在Kotlin的类中不允许你声明静态成员或方法。相反,你必须向类中添加Companion对象来包装这些静态引用

参考

模块化

模块化的作用

业务分离

通用化,代码复用

如何实现模块化

公用模块抽取

业务模块抽取

主工程组装业务模块

模块间的通讯

跨模块跳转

跨模块接口调用

ARouter路由框架(alibaba)

MVP架构

MVP 全称:Model - View - Presenter

Model 表示数据层,View 表示视图层,Presenter 表示逻辑处理层

在 MVP 模式中

View 不和 Model 进行直接交互,View 通过 Presenter 将前端数据传给 Model,或者通过 Presenter 从 Model 中获取数据,View 和 Model 所有的交互都发生在 Presenter 中

View 负责前端的展示以及与用户的交互

Model 负责数据的存储以及调用

好处:能够有效解耦工程,分为各个独立模块,功能清晰,有利于重复使用,在调试过程中也能够快速定位错误

缺陷:增加代码工作量

6873820130d7

android_mvp_uml.jpg

技术选型

视图层

kotlin-android-extensions

Butterknife

业务层

RxKotlin

RxAndroid

RxLifecycle

其他

Dagger2(依赖注入)

Gson(数据路由)

ARouter(模块路由)

Glide(图片加载)

takephoto(图片选择)

七牛(数据云存储)

MultiStateView(多状态视图)

bga-refreshlayout(上下拉刷新)

Application与Library

启动

Application作为应用程序启动: apply plugin: 'com.android.application'

Library作为库工程被引用: apply plugin: 'com.android.library'

切换

if(xxx.toBoolean()){

apply plugin: 'com.android.library'

}else{

apply plugin: 'com.android.application'

}

两套AndroidManifest

一套用于Application时使用,配置主题及默认启动,位于debug目录

一套用于Library时使用,注册组件及权限,位于release目录

AndroidManifest的切换

sourceSers{

main{

if(xxx.toBoolean()){

mainfest.srcFile 'src/main/release/AndroidManifest.xml'

}else{

mainfest.srcFile 'src/main/debug/AndroidManifest.xml'

}

}

}

android-extensions介绍

视图绑定,可直接使用XML中ID操作该控件

插件级别,无需引入第三方库

无需定义变量,极大减少代码

适用于Activity, Fragment, Adapter及自定义View

Anko

Anko组成部分:

Anko Commons

Anko Layouts

Anko SQLite:数据库

Anko Coroutines: 协程

RxJava

Retrofit

Dagger2:依赖注入

@Inject和@Component

@Module和@Provides

@Scope和@Singleton

@Qualifier和@Named

依赖注入的含义:

正常版:

class ClassB{

fun sayHello(){

println("hello")

}

}

class ClassA{

var mClassB: ClassB

init{

mClassB = ClassB()

}

fun doSomething(){

mClassB.sayHello()

}

}

依赖注入版:

class ClassB @Inject constructor{

fun sayHello(){

println("hello")

}

}

class ClassA{

@Inject

lateinit var mClassB: ClassB

fun doSomething(){

mClassB.sayHello()

}

}

@Component

注入器,连接目标类和依赖实例的桥梁

以@Component标注的类必须是接口或者抽象类

Component依赖关系通过dependencier属性添加

App必须有一个Component用来管理全局实例

@Module

第三方库无法修改,不能在其构造函数添加@Inject

接口不能实例化, 只能通过实现类实例化

Module是一个简单工厂,创建类实例的方法

Component通过Modules属性加入多个Module

@Proivides

在Module中,使用@Provides标注创建实例的方法

实例化流程

-- Component搜索@Inject注解的属性

-- Component查找Module中以@Provides注解的对应方法,创建实例

Inject和Module维度

Module优先级高于Inject构造函数

查找到实例对象,依次查看其参数实例化

Module中存在创建实例方法,停止查找Inject维度,如果没有,查找Inject构造函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值