- 博客(16)
- 资源 (1)
- 收藏
- 关注
原创 Flutter 常见问题汇总
1.GestureDetector在空白的地方无法响应点击事件添加 behavior: HitTestBehavior.translucentGestureDetector( behavior: HitTestBehavior.translucent, // onTap: () {}, onPanDown: (detail) { log('detail:globalPo...
2024-07-02 16:55:01
329
原创 Android中遇到的问题
继承LinearLayout后onDraw方法不调用init{ //添加这两句代码即可,在onDraw代码中会检测dividerDrawable属性,如果为空就不会调用onDraw dividerDrawable = ColorDrawable() showDividers = SHOW_DIVIDER_BEGINNING}kotlin中如果方法参数是接口,kot...
2024-07-02 16:53:59
321
原创 Android 模块化工程构建
该工程使用的gradle版本为7.4.0,使用的gradle插件是7.3.0,kotlin插件版本为1.7.10,每个模块都有简单的说明,有需要的可以看一下。之后在各个模块中的依赖我们只需要引用dependencies.gradle中的变量就可以,具体的版本号将在dependencies.gradle得到统一的管理。这会改变引用包的可见性,让引用common模块的其他模块也能使用common中引用的第三方。想象一下这个场景,如果我们的下单模块需要去验证是否登陆,而登陆的业务是在登陆模块中的。
2022-11-02 11:58:29
684
1
原创 Retrofit源码分析笔记(一)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v5QvubsS-1665971394325)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/cf8da32d42d4499f8bf94ce879fa0da9~tplv-k3u1fbpfcp-watermark.image?
2022-10-18 09:45:30
178
原创 Retrofit源码分析笔记(二)Kotlin协程的实现
我们先来看SuspendForResponse,在调用retrofit的invoke方法后,最后会调用的SuspendForResponse的adapt方法,上面我们已经说了CallAdapter会选择DefaultCallAdapterFactory,调用。那么Retrofit是怎么适配协程的呢。在上一篇文章中,我们了解到retrofit的入参解析,在入参解析的时候就kotlin就已经确定是否需要使用协程,下面的代码中,p == lastParameter如果为true则方法使用了协程。
2022-10-18 09:44:25
297
原创 kotlin协程详解(一)
上面的代码使用的协程调度器为 Dispatchers.Main从上面的日志中可以看到Log.e(TAG, “coroutine1”)闭包代码块之外的代码是在之前被低昂用的,因为 Dispatchers.Main最后是通handler让协程运行在主线程上。因为在request1中我们调用了delay方法,delay方法是在一个默认的线程池中调用,代码执行到delay协程将会被挂起,之后延时结束后将会被恢复,以回调的方式执行接下来的代码。Disaptchers.IO 显示的指定协程运行的线程为IO线程。
2022-10-17 09:44:44
714
原创 如何通过组合的方式自定义View
上面的代码中,第一句是通过obtainStyledAttributes解析上面XML文件中属性名为InputItemLayout的属性内容,并返回TypedArray,后续该命名空间中的所有属性都可以通过TypedArray.getXX()来获得XX是属性类型。如上代码,我们先获取在InputItemLayout属性中titleTextAppearance的属性,这时候发现titleTextAppearance是一个引用类型的属性,在使用。最终我们获取了所有的属性,这时候就可以开始自定义你的View了。
2022-10-17 09:36:58
548
原创 Android常用多线程解析(二)线程安全
1.线程的优先级是具有继承性的,在某个线程中创建的线程会继承线程的优先级。例如我们在UI线程中创建了线程,则线程优先级和UI线程优先级一样,平等的和UI线程抢占CPU时间资源。Volatile修饰的成员变量在每次线程访问时,都强迫从共享内存重新读取该成员的值,而且,当成员变量值发生变化时,强迫将变化的值重新写入共享内存。2.JDKAPI 中限制了新设置的线程优先级必须为[1~10], 优先级priority越高,获取CPU时间片段的概率越高。join关键字的作用是等待目标线程执行完后再执行此线程。
2022-10-17 09:35:52
659
原创 Android常用多线程解析(一)线程的使用
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Qwcwr1O-1665970419072)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2eaa659a5bb24a4b85385e84b58b362d~tplv-k3u1fbpfcp-watermark.image?)]上图是Android中多线程实现的主要方式,和线程的控制流程。
2022-10-17 09:34:23
1026
原创 Android常用多线程解析(三)线程池分析
进入到下面的封装任务代码Work类是实现自Runnable内部实现了一个简单的互斥锁,将任务通过构造器传递给Work类,并校验Wokr中的线程不为空,使用ReentrantLock防止在添加任务的时候出错,最后在校验过线程池的状态后,将Work加入到workes的HashSet中。如果核心线程池满了,并且线程池还在运行,就会把这个任务放入等待队列中,在加入等待队列后,线程池会再次检查线程池的状态,和核心线程池的数量,防止在添加任务的时候线程池被关闭,或者有的核心线程死亡或者任务执行完成。
2022-10-17 09:32:35
253
原创 JetPack系列(一)Lifecycle
Lifecycle是可用于构建生命周期感知型组件的类和接口 - 这些组件可以根据 Activity 或 Fragment 的当前生命周期状态自动调整其行为。我们有三种方法去使用Lifecycle观察宿主的生命周期(宿主:实现LifecycleOwner的类)
2022-10-17 09:31:23
401
原创 JetPack系列(二)LiveData
LiveData是一个可观察的数据持有者类,与常规的Observable不同,LiveData可感知Activity、Fragment、Service的生命周期,确保LiveData仅更新处于活动生命周期状态的组件观察者。如果应用程序组件观察者处于started或者resumed,则LiveData认为该组件处于活跃状态,该组件会收到LiveData的数据更新,而其他注册的组件观察者将不会收到任何数据更新。
2022-10-17 09:28:52
521
原创 JetPack系列(三)ViewModel
上面介绍过ViewModel的保存者是mViewModelStore,而mViewModelStore的提供者是ViewModelStoreOwner,而在Fragment中我们使用的是Fragment中保存的Activity,所以ViewModelStoreOwner是同一个对象,所以ViewModel是同一个对象。从上面的代码中可以看到,如果我们的Activity中持有Fragment,且Fragment中获取ViewModel的方式为。Activity中的方法又在ActivityThread中被。
2022-10-17 09:27:27
430
原创 JetPack系列(四)Room
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XuqxckBS-1665969811493)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/149096c5ab9b4814b32341e39cf27e2d~tplv-k3u1fbpfcp-watermark.image?转化器的方法名不重要,重要的是入参和出参,在上面的Entity中testList是不能被数据库存储的,当存储到数据控中会经过转换器。
2022-10-17 09:25:26
1057
原创 Android消息机制Handler原理分析
1.Message的回调方法:message.callback.run(),优先级最高2.Handler的回调方法 Handler.mCallBack.handleMessage(msg)3.Handler的默认方法:Handler.handleMessage(msg)上图是Android消息机制的图解图中分为四个部分,Handler, Looper, MessageQueue, MessageHander主要是将消息发送到MessageQueue中,和处理接收到消息后执行的代码。
2022-10-15 21:52:01
1414
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人