随笔分类 - android基础
Kotlin Flow
摘要:Kotlin Flow 一:Flow的概念 Flow流的概念感觉类似于Java的响应式编程,下面看两段代码: // flow的上游 override suspend fun getCompanyListings( fetchFromRemote: Boolean, query: String ):
笔记 权限请求,含intent和permission同时处理情况
摘要:package com.example.composeproject import android.Manifest import android.content.Intent import android.content.pm.PackageManager import android.net.U
lifecycle的记录
摘要:一:继承LifecycleEventObserver 要继承LifecycleEventObserver而不是它的父类,如果既继承它,也继承它的父类(它的父类是LifecycleObserver),那么@OnLifecycleEvent注释会被忽略。 打开方式: class MyLifeCycle:
进程间通信方式
摘要:一:共享存储器系统 1:基于共享数据结构 两个进程间公用某些数据结构,来实现信息交换。这种通信仅适用于传递相对少量的数据,效率低下。比如生产者消费者问题中共用的有界缓冲区。 2:基于共享存储区 在内存中划出了一块共享存储区域,两个进程可通过对区域的读或写交换信息,实现通信。数据的形式和位置甚至访问控
为何一个线程可以对应一个looper
摘要:一:前置知识 Looper有一个变量:ThreadLocal<Looper> Thread.currentThread 打破次元壁,在应用层沟通底层,获得当前线程信息 每一个Thread,不管是Android的main thread,还是自己定义的thread,总之就是一个Thread,含有一个Th
Okhttp学习笔记
摘要:一:设置篇 1:RealCall client.newCall(request).enqueue(object: Callback{ newCall会构建一个RealCall对象。 class RealCall( val client: OkHttpClient, val originalReque
kotlin协程suspend背后的逻辑和状态机思想
摘要:一:前置知识 1:状态机是什么 状态机state machine是什么?它就是用来表示一个对象处于什么状态然后决定正确状态下做正确的事。 比如说:饮料机在没有扫码的时候处于0状态,就不能调用开门这个方法,而扫码之后,饮料机的状态改变,才可以开门,但是扫了码就不能再扫了,状态不同,做的事也不同,状态之
Jetpack compose问题的记录
摘要:一:setContent的调用者 在activity中会调用一个setContent,然后里面放上我们的Jetpack compose之旅.... 在view体系中我遍历一个空的activity——xml什么都没有,的decor view的所有子view,与一个compose体系中setConten
理解Android的四种启动模式
摘要:一:前言 四种模式分别为standard, singleTop, singleTask, singleInstance。自己应该明确一个概念先,single到底要single什么。每一个应用app都有一个包名,然后每一个应用都会有一个task,这个task和包名对应起来,如果要创建一个新task,名
Handler消息机制 笔记
摘要:这是笔记,没有源码分析和详细过程,只有自己总结出来的重点,源码分析看参考资料,前辈写的很好。 一个线程,一个Looper,一个MessageQueue,多个Handler MessageQueue单链表结构 使用ThreadLocal机制保证一个线程一个Looper:https://www.cnbl
ViewRootImpl的连接时机
摘要:ActivityThread在使用handleResumeActivity方法调用了activity的onResume方法之后,就调用了 wm.addView(decor, LayoutParams) wm其实是WindowManagerGlobal 所以调用了 WindowManagerGloba
Activity启动流程 stop的理解
摘要:当启动一个activity的时候 onCreate --> onStart > onResume 当启动另一个activity的时候: old activity onPause new activity onCreate --> onStart > onResume old activity onS
viewmodel的存取流程
摘要:一:获取view model的代码 public <T extends ViewModel> T get(@NonNull String key, @NonNull Class<T> modelClass) { ViewModel viewModel = mViewModelStore.get(ke
classpath 和 implementation的区别
摘要:https://stackoverflow.com/questions/34286407/gradle-what-is-the-difference-between-classpath-and-compile-dependencies/69631709#69631709 简单来说就是,classpa
HTTP header中的host的作用
摘要:比如,我们在地址框内输入:1.com这个网址,因为我们要访问网络的另一端是通过IP地址来定位的,所以我们要先拿到IP地址。第一步:把这个域名1.com发给DNS域名服务器,然后得到第二步中它返回的IP地址,假设是1.1.1.1。 然后第三步,我们通过IP地址找到了目标主机,但是目标主机体内装有三个虚
fragment不使用用binding的加载视图方法
摘要:abstract class BaseFragment :Fragment(){ override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): Vi
1