框架实现
文章平均质量分 85
李小白lt
kotlin yyds
展开
-
Kotlin跨平台的网络请求框架-跨平台的Retrofit
一般安卓开发中网络请求框架都是使用OkHttp+Retrofit,但其只能应用于jvm平台上而Kotlin可用于jvm,js,native因此一个Kotlin跨平台的网络请求框架必不可少而ktor-client是Kotlin官方提供的网络请求框架,可以跨平台的进行网络请求与之对应的还有ktor-server可以用来写服务器端(但这不是这篇文章的重点)但ktor-client使用起来还是稍微有些麻烦,所以我们可以模仿Retrofit开发一个更方便使用的跨平台网络请求框架。原创 2023-05-31 21:45:00 · 1283 阅读 · 0 评论 -
Kotlin如何延时准确的循环执行事件,比如倒计时或每一秒执行一次事件
延时循环执行事件很简单,且有很多方式,但想要延时相对精确,就需要稍微设计一下了,众所周知我们常用的操作系统都不是实时操作系统,比如Windows,Linux,Android等,所以我们上面的延时操作不管是Thread.sleep(1000)还是delay(1000)都不一定会在1000毫秒后恢复,我们测试一下原创 2022-12-11 20:51:03 · 4778 阅读 · 0 评论 -
KMM Kotlin expect的几种声明方式
前言Kotlin的expect关键字一般用在多平台上,比如在多平台项目中的common中声明方法签名,然后由不同的平台去实现该方法,从而实现一个多平台(跨平台)方法.创建KMM项目可以参考:KMM(二)+Compose(二) 开发一个Kotlin多平台应用_滔lt的博客-CSDN博客正文接下来就说一下Kotlin expect的几种声明方式1.顶层函数和顶层扩展函数在commonMain文件夹中声明:在androidMain(和其他平台)文件夹中实现:声明并实现后,.原创 2022-03-17 23:37:40 · 3864 阅读 · 2 评论 -
RecyclerView复杂适配器的终极形态?代码更解耦
前言RecyclerView是Android开发中很常用的控件,市面上也有很多种封装,使其更易用,但是面对复杂的适配器需求,则很难做到逻辑清晰且解耦,比如聊天消息的适配器正文1.首先我们用最原始的方法写一个简单的聊天消息的rv实现图如下:代码如下:class MainActivity : AppCompatActivity() { //数据源: type to data val msgData = mutableListOf<Pair<Int, An原创 2022-01-07 15:50:10 · 3092 阅读 · 4 评论 -
使用Retrofit的方式请求Socket,且Socket可以和Http无缝切换
前言一般来说前端的app和服务器通讯都是用的Http,Http使用方便,请求流程好控制,但有时候app需要实时接收服务端的推送或保持长连接,这时就需要使用Socket了java提供的Socket接口还是比较难用的,而网上有一个开源库OkScoket封装的还是挺好用的,Github地址:https://github.com/xuuhaoo/OkSocket但即使如此,其没有一对一回调或同步请求方法,只能通过一个或几个统一的回调方法,就造成了使用比较麻烦且容易出错而Retrofit使用比较好用,原创 2021-02-27 23:04:56 · 2522 阅读 · 0 评论 -
分析Kotlin协程只挂起不恢复会怎样(是否存在协程泄漏),以及挂起的协程存在哪里?
前言刚开始正式学协程原理的时候(以前只是学api怎么用),大概是20年5月,也就是bennyhuo大佬出书<深入理解Kotlin协程>的时候,我买了本然后细细研究,我的内心就一直有一个问题,协程只挂起不恢复会不会造成协程的内存和程序泄漏,然后加了bennyhuo大佬的群,问了协程会不会泄漏,结果没回答我,后来想想应该是我问的不够具体(直接问一个会不会泄漏怎么回答2333)...原创 2021-01-15 22:02:29 · 672 阅读 · 5 评论 -
动手实现Kotlin协程同步切换线程,以及Kotlin协程是如何实现线程切换的
前言突发奇想想搞一个同步切换线程的Kotlin协程,而不用各种withContext(){},可以减少嵌套且逻辑更清晰,想实现的结果如下图:分析实现我们想要的结果,首先需要知道协程为什么可以控制线程的切换以及在挂起函数恢复的时候回到原来设定的线程中ps:挂起函数比普通函数多出了两个操作:挂起和恢复,具体参考:https://blog.csdn.net/qq_33505109/article/details/109066392其实控制线程切换是协程库内内置的一个拦截器类:Continu原创 2021-01-14 18:09:32 · 3293 阅读 · 4 评论 -
Hook安卓项目内的字符串获取,用服务器的key value优先代替本地的key value
前言前段时间接到一个需求,要动态的增加多语言语种,且可以动态更新用户app上的不规范语言(比如一个英语过长导致按钮内显示不全)服务端的逻辑和前段动态获取的逻辑就不说了动态修改app内的语言参考这篇安卓多语言设置,深渊巨坑,适配7.0以上,并且解决因WebView产生的问题正文首先确定一下安卓中有几种获取字符串的方式1.Context#getResources().getString()2.Context#getString()//其实内部还是用的上一种方式,只不过少写了一点代码原创 2021-01-05 13:26:20 · 3675 阅读 · 13 评论 -
模仿Retrofit封装一个使用更简单的网络请求框架
前言想封装一套网络请求,不想直接上来就用别人写好的,或者说对项目可以更好的掌控,所以自己模仿着Retrofit来写一套.想要有如下实现:1.快捷的网络请求调用2.声明式的定义网络请求函数3.可以很灵活的变更网络请求的方式(http,https,socket等)4.可以使用自己的线程池或者协程进行线程调度调用网络请求和接收返回数据:使用this或者:使用匿名内...原创 2020-03-26 16:37:06 · 813 阅读 · 0 评论 -
Android的Application的生命周期方法
onCreate()App创建的时候调用,Application对象会从App创建一直存活到App被杀死注意:一般开发App(应用)的时候会在Application的onCreate()中进行大量的三方框架初始化操作,这样是不正确的,因为在冷启动一个App的情况下,是会先走Application的onCreate(),走完之后会走启动的Activity的onCreate(),如果App...原创 2019-01-02 16:42:20 · 3733 阅读 · 3 评论 -
androidx使用FileProvider适配安卓7
前言安卓7版本后,需要适配获取本地uri,否则会报错,之前用的android support库,可以参考这篇文章<点击查看>但是现在使用了androidx后,发现清单文件中配置不一样了适配方法以前是 <provider android:name="android.support.v4.content.FileProvi...原创 2019-05-21 13:40:40 · 21691 阅读 · 1 评论 -
Android技能树 — LayoutInflater Factory小结
前言今天早上地铁上在洋神的公众号上看到了一篇干货,就给转过来了。前段时间流行起来了突然不愿意写Shape,Selector文件的文章,然后各种方案,编写自定义View等。那时候大家应该都看到了一篇:无需自定义View,彻底解放shape,selector吧。我发现这个想法挺好的,所以今天就一步步来讲解下跟这个方案有关的相关基础知识点,看完后大家基本就会懂了,然后可以自己编写。所以我们本...转载 2018-11-21 14:19:41 · 547 阅读 · 0 评论