- 博客(10)
- 资源 (7)
- 问答 (1)
- 收藏
- 关注
原创 Kotlin 泛型中的 in 和 out
当我们在 Kotlin 中定义泛型时,我们会发现它需要使用到 in 和 out 两个关键字来定义。从形式上来讲,这是一种定义「逆变」和「协变」的方式。 那啥叫逆变?啥叫协变?可以参考下维基百科的定义:协变与逆变 in & out 怎么记? out(协变) 如果泛型类只将泛型类型作为函数的返回(输出),那么使用 out: interface Production<out T> {...
2019-03-27 16:53:30
6819
2
原创 Pair 了解一下
介绍 Pair 的字面意思是“一对”、“一双”,瞄一眼它的源码,果不其然,里面只有两个字段 first 与 second . public class Pair<F, S> { public final F first; public final S second; public Pair(F first, S second) { this.f...
2019-01-30 14:35:36
782
原创 Android Jetpack 之 LiveData
概述 LiveData 是一个持有数据的类,它持有的数据是可以被观察者订阅的,当数据被修改时就会通知观察者。观察者可以是 Activity、Fragment、Service 等。 LiveData 能够感知观察者的生命周期,只有当观察者处于激活状态(STARTED、RESUMED)才会接收到数据更新的通知,在未激活时会自动解注册观察者,以减少内存泄漏。 使用 LiveData 保存数据时,由于数...
2018-11-25 23:37:43
349
原创 Android Jetpack 之 Lifecycle
前言 在日常的开发中,我们通常需要在 Activity / Fragment 的生命周期方法中进行一些繁重的操作,这样使代码看起来十分臃肿。Lifecycle 的引入主要是用来管理和响应 Activity / Fragment 的生命周期的变化,帮助我们编写出更易于组织且通常更加轻量级的代码,让代码变得更易于维护。 Lifecycle 是一个类,它持有 Activity / Fragment 生命...
2018-11-12 08:36:46
454
原创 Android Jetpack 之 ViewModel
前言 在 Android 中,ViewModel 的作用就是在 UI 控制器( 如 Activity、Fragment)的生命周期中保存和管理 UI 相关的数据。ViewModel 保存的数据在配置更改(如屏幕旋转)后会依然存在,不会丢失。 在屏幕旋转的时候,Activity 会重建,为了不让数据丢失,我们通常的做法是在 onSaveInstanceState() 方法中通过 bundle 保存数...
2018-10-27 14:49:48
502
原创 Kotlin 扩展函数 run , with , let , also 和 apply
函数定义与使用 run() 定义 /** * Calls the specified function [block] and returns its result. */ @kotlin.internal.InlineOnly public inline fun <R> run(block: () -> R): R { contract { call...
2018-10-24 22:21:46
284
原创 Android 之 Activity
Activity正常生命周期流程 Activity异常情况生命周期分析 Activity生命周期附加说明 configChanges属性的应用 Activity启动模式 四种加载模式 LaunchMode附加说明 Activity的Flags IntentFilter的匹配规则 action的匹配规则 category的匹配规则 data的匹配规则 Activity正常生命周期流程...
2018-10-24 21:58:01
172
原创 Mock 测试
在开发过程中,前端和后端的工作通常都是并行的,要想有效地提高工作效率,后端的接口文档就显得特别重要。 接口文档代表着一份请求/响应的契约书,简单地讲就是前端需要带什么样的数据过去?后端返回什么样的数据? 有了接口文档,我们就清楚了与后端交互的数据结构,然后可以通过 Mock 模拟请求/响应的数据。这样可以在前后端互不干扰的情况下完成各自的工作,大大地提高了开发效率。 以下简单介绍 Github 上...
2018-10-24 15:44:06
287
原创 Android 一个应用多个数据库
最近在做一个 IM 的项目,需要存储大量数据到本地数据库。考虑到同一台手机可能会被多个账号登录使用,为了提升数据库查询的效率,以分库的方式来存储不同账号的数据(使用用户账号来作为数据库名称)。 以存储用户信息为例: 先贴出使用代码: mUserDAO = new UserDAO(this, account); // 此处的 account 就是要操作的数据库名称 mUserDAO.insert...
2018-10-24 15:32:02
3621
1
原创 Android 之 Fragment
产生原因 Android 在 Android 3.0(API 级别 11)中引入了 Fragment(片段),主要是为了给大屏幕(如平板电脑)上更加动态和灵活的 UI 设计提供支持。由于平板电脑的屏幕比手机屏幕大得多,因此可用于组合和交换 UI 组件的空间更大。利用 Fragment 实现此类设计时,无需管理对视图层次结构的复杂更改。 通过将 Activity 布局分成 Fragment , 可以...
2018-10-24 14:17:31
461
Android日程管理项目主要界面
2014-12-25
ListView下拉刷新得到新的几条数据,保持原来的查看全文和收起状态类似微信朋友圈。
2015-05-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人