自定义博客皮肤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

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

转载 Gradle入门之基础概念

如果在使用Gradle过程中有任何疑问,都建议去官网溜达溜达:https://docs.gradle.org/current/userguide/userguide.htmlGradle是什么Gradle是一款开源的自动化构建工具,可以灵活的构建任何类型软件(基本上),比如我们日常开发所熟知的:Java的产物(.JAR)Android Application的产物(.APK)Android Library的产物(.AAR)目前Gradle已经是Android官方首推的自动化构建工具线,也是我们

2021-01-31 21:32:05 463

原创 深入理解Result API:ActivityResultContract的实现原理

AndroidX从Activity:1.2.0-alpha02 和 Fragment:1.3.0-alpha02 起新追加了Result API,使用ActivityResultContract替代startActivityForResult,更加高效且typesafe的处理跨Activity通信。目前ResultAPI已升级到rc版,相对于alpha版API上有所变化,本文内容基于1.2.0-rc-01参考:alpha版的Result API如何使用AppCompatActivity和Fragm

2021-01-29 02:25:49 2324 1

原创 基于Redux和Kotlin Multiplatform打造跨平台移动应用

客户端的跨平台技术早已屡见不鲜,在UI层面,native开发在用户体验等方面仍然占据优势;但是在逻辑层,通过Kotlin Multiplatform等跨平台技术确实可以通过维护一套代码提高开发效率。引入跨平台技术后,该如何选择一个适合的开发范式也成为了新的课题。近期有国外同行通过一个Sample App提出了使用ReduxKotlin打造Kotlin跨平台APP的思路,或许值得大家借鉴。原文地址:https://blog.dreipol.ch/trash-disposal-with-kotlin-mu.

2021-01-27 02:54:39 597 1

原创 【Android】Coil:为kotlin而生的图片库

Coil可以配合Kotlin协程实现图片加载,非常适合在Kotlin/Android项目中使用:加载性能好缓存管理(MemCache、DiskCache)、动态采样(Dynamic image sampling)、加载中暂停/终止等功能有助于提高图片加载效率体积小其包体积与Picasso相当,显著低于Glide和Fresco,仅仅只有1500个方法,但是在功能上却不输于其他同类库简单易用配合Kotlin扩展方法等语法优势,API简单易用技术先进基于Coroutine、OkHttp、Ok.

2021-01-24 01:47:36 6101 4

原创 回顾2020:这一年Android发布了哪些新技术?

Kotlin & CoroutinesKotlin 1.4 发布性能提升、类型推导强化、SAM转换的支持,等等一系列进化https://github.com/JetBrains/kotlin/releases/tag/v1.4.0https://blog.jetbrains.com/kotlin/2020/08/kotlin-1-4-released-with-a-focus-on-quality-and-performance/Coroutines 1.4 发布增加了 St.

2021-01-17 23:04:39 1244 1

原创 Jetpack Room入门系列:(六)配合LiveData等三方库的使用

作为Jetpack生态的成员,Room可以很好地兼容Jetpack的其他组件以及ACC推荐的三方库,例如LiveData、RxJava等。使用LiveDataDAO可以定义LiveData类型的结果,Room内部兼容了LiveData的响应式逻辑。可观察的查询通常的Query需要命令式的获取结果,LiveData可以让结果的更新可被观察(Observable Queries)。@Daointerface UserDao { @Query("SELECT * FROM users").

2021-01-17 16:17:45 725

原创 Jetpack Room入门系列:(五)数据库版本升级、数据迁移

当数据库的表结构发生变化时,我们需要通过数据库迁移(Migrations)升级表结构,避免数据丢失。例如,我们想要为User表增加age字段| uid | first_name | last_name |↓↓| uid | first_name | last_name | age |数据迁移需要使用Migration类:val MIGRATION_1_2 = object : Migration(1, 2) { override fun migrate(database: Supp.

2021-01-17 15:02:39 739

原创 Jetpack Room入门系列:(四)内部实现原理

通过例子了解一下Room的底层实现原理。SampleDatabase定义一个UserDatabase,只有一个实体User:@Database(entities = [User::class], version = 1)abstract class UserDatabase : RoomDatabase() { abstract fun userDao(): UserDao}EntityUser有三个字段(Column):@Entity(tableName = USERS_TABL.

2021-01-17 14:34:40 1086

原创 Jetpack Room入门系列:(三)实体/数据表关系

对于关系型数据库来说,最重要的是如何将数据拆分为有相关关系的多个数据表。SQLite作为关系型数据库,允许entits之间可以有多种关系,Room提供了多种方式表达这种关系。@Embedded内嵌对象@Embedded注解可以将一个Entity作为属性内嵌到另一Entity,我们可以像访问Column一样访问内嵌Entity内嵌实体本身也可以包括其他内嵌对象data class Address( val street: String?, val state: String?, .

2021-01-17 01:09:42 819

原创 Jetpack Room入门系列:(二)使用DAO读写数据库

Room中使用Data Access Objects( DAO)对数据库进行读写,相对于SQL语句直接查询,DAO可以定义更加友好的API。DAO中可以自定义CURD方法,还可以方便地与RxJava、LiveData等进行集成。我们可以使用接口或者抽象类定一个DAO,如果使用抽象类,可以选择性的为其定义构造函数,并接受Database作为唯一参数。Room在编译期会基于定义的DAO生成具体实现类,实现具体CRUD方法。@Insert 插入@Insert注解插入操作,编译期生成的代码会将所有的参.

2021-01-16 21:27:12 1144

原创 Jetpack Room入门系列:(一)基本介绍

Android Jetpack的出现统一了Android开发生态,各种三方库逐渐被官方组件所取代。Room也同样如此,逐渐取代竞品成为最主流的数据库ORM框架。这当然不仅仅因为其官方组件的身份,更是因为其良好的开发体验,大大降低了SQLite的使用门槛。框架特点相对于SQLiteOpenHelper等传统方法,使用Room操作SQLite有以下优势:编译期检查SQL语句开发高效,避免大量模板代码API设计人性化,容易理解可以方便的与RxJava、 LiveData 或者 Kotlin Cor

2021-01-16 18:38:12 682 1

原创 深入分析RxJava的Disposable及其工作原理

良好的编码习惯告诉我们,任何基于订阅者模式代码,都要注意为注册与注销的配对出现,以避免泄露都问题DisposableRxJava通过Disposable(RxJava1中是Subscription)在适当的时机取消订阅、停止数据流的继续发射。这在Android等具有Lifecycle概念的case中非常重要,避免造成一些不必要的对象泄露与bug。private CompositeDisposable compositeDisposable = new CompositeDisposab..

2021-01-10 15:46:01 5252

原创 当Jetpack Compose遇到Navigation

很多Android项目使用Jetpack Navigation进行页面切换。Navigation在设计上高度抽象,只负责导航逻辑不关心页面的具体实现,无论是Activity、Fragment甚至是一个已定义View都可以基于Navigation实现导航。当然,Composable也是可以的。Jetpack Compose作为一个声明式UI框架经常拿来与React 、Flutter等作对比,但是遗憾的是Compose一直缺少其他框架的导航机制,现在使用Jetpack自家的Navigation,可以将Com.

2021-01-04 00:02:38 3810 13

原创 Fragment中处理OnBackPressed的正确姿势

Fragment无法像Activity那样重写OnBackPressed方法,所以拦截Back键相对比较复杂,但这又是一个常见需求,例如以下场景:在SearchFragment中,点击back键时,关闭SearchView而非直接退出使用FragmentManger一个常见做法是定义一个带有OnBackPressed的方法的接口或基类给Fragment继承:interface BackPressHandler { fun onBackPressed(): Boolean}然后,F

2021-01-03 14:35:31 7004 1

翻译 Android+Kotlin中实践Clean Architecture

Clean ArchitectureClean Architecture 由Robert C. Martin(Uncle Bob)发布于2012年 :http://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html目前被作为项目结构组织的最佳范式被广泛熟知,连Android官方的MVVM示例项目中也有所使用。Clean架构很好地实践了SLOID原则,具有以下优点分层设计贯彻了关注点分离高度抽象,适用于各类型

2021-01-02 19:38:12 1326

原创 Kotlin + ReentrantLock

Synchronized or ReentrantLock?kotlin虽然没有Synchronized关键字,但是提供了同名的inline函数,可以应付一般的多线程同步场景。private val lock = Object()...synchronized(lock) { ...}但是kotlin的synchronized只能兼容jvm平台,所以在跨平台时无法使用,目前已经被Deprecated在这,Object的notify、wait等方法Kotlin中也无法使用; Sync

2021-01-02 17:25:42 1385

原创 基于Dagger Hilt的单元测试

architecture-samplesandroid/architecture-samples是google官方的sample项目:TODO-APP,其主要目的是帮助开发者学习androidx中各种组件的使用。其中dev-hilt分支展示了Dagger Hilt的使用:https://github.com/android/architecture-samples/tree/dev-hilt(hash:f2fd9ce969a431b20218f3ace38bbb95fd4d1151),在这里我们可以

2021-01-01 22:31:01 656

空空如也

空空如也

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

TA关注的人

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