自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

sometime here

nothing here

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

原创 最近的项目——神奇宝贝图鉴

神奇宝贝图鉴

2022-10-30 10:20:28 268

原创 Stock Market App Note

1: data layer model vs domain layer modeldata层放的model是直接映射api获取的接口或数据库存储的,当presentation层不一定需要全部字段,或者需要经过一定的transfer才能用在数据层,如果presentaiton层直接使用data 层的数据结构,那么presentation层就会被data 层的数据逻辑所污染,因此需要map,把da...

2022-05-28 16:59:00 252

原创 Kotlin Flow

Kotlin Flow一:Flow的概念Flow流的概念感觉类似于Java的响应式编程,下面看两段代码:// flow的上游override suspend fun getCompanyListings( fetchFromRemote: Boolean, query: String ): Flow<Resource<List<C...

2022-05-26 20:46:00 680

原创 实习过后来个总结吧

在广州实习了4个月,总结一下这段时间的收获,顺便分享一下自己的感想。本文章会分成两个部分,一个是理念篇,分享自己的感悟,一个是技术篇,分享自己的技术收获。一:理念篇:1:没有必要证明自己。记得许久之前就在一篇博客上看过一段话,没有必要向公司证明自己,当你觉得没有收获,或得不到进步的时候,就应该离职了,而不用觉得有什么过意不去。在这个组中,总监给了一个任务我,让我自己完成整个项目,一开始的...

2022-05-25 23:09:00 166

原创 Rxjava使用手册

创建Observableshttps://github.com/ReactiveX/RxJava/wiki/Creating-Observables#create1:Observable.fromAction使用效果:Observable<Integer> observable = Observable.fromAction( () ->...

2022-05-25 23:06:00 183

原创 对json用Gson进行自定义解析

一:面对的数据{ "code": 0, "key": "common_success", "msg": "成功", "data": { "ver": "1", "items": [ { "name": "glt" }, { ...

2022-05-21 16:34:00 824

原创 day1 Hilt

一:开始在https://dagger.dev/hilt/gradle-setup中找到依赖二:写一个Application写一个类继承系统的Application,并把它写在Manifest里,并加上注释:@HiltAndroidApp例子:/** * 使用hilt需要加这个注释 */@HiltAndroidAppclass MyApplication: Appli...

2022-04-08 11:59:00 110

原创 笔记 权限请求,含intent和permission同时处理情况

package com.example.composeprojectimport android.Manifestimport android.content.Intentimport android.content.pm.PackageManagerimport android.net.Uriimport android.os.Bundleimport android.prov...

2022-03-26 16:09:00 1771

原创 lifecycle的记录

一:继承LifecycleEventObserver要继承LifecycleEventObserver而不是它的父类,如果既继承它,也继承它的父类(它的父类是LifecycleObserver),那么@OnLifecycleEvent注释会被忽略。打开方式:class MyLifeCycle: LifecycleEventObserver { override fun onSta...

2022-03-11 23:50:00 98

原创 利用static来实现单例模式

一:之前旧的写法class Singleton{ private Singleton() {} private static Singleton instance = null; public synchronized static Singleton getInstance() { if (instance == null) { ...

2022-01-08 21:04:00 944

原创 三次握手的作用

三次握手的作用:防止因网络阻塞原因,导致服务端无缘无故打开连接。场景1:客户端先发送一个请求连接报文a,但是网络阻塞,所以客户端(没收到回复判断请求报文阻塞了)再发送了一个请求连接报文b。但是呢,服务端先收到请求a,然后(假设是两次握手)服务端就建立连接了!!,它发送了一个回复报文给客户端,但客户端不会再回答(因为假设两次握手)。但三次握手就可以避免这种情况,因为服务端在收到请求时不会建...

2021-12-30 09:53:00 618

原创 Jetpack compose问题的记录

一:setContent的调用者在activity中会调用一个setContent,然后里面放上我们的Jetpack compose之旅....在view体系中我遍历一个空的activity——xml什么都没有,的decor view的所有子view,与一个compose体系中setContent里为空的activity的decor view的子view,发现compose版本只多了这一个v...

2021-12-29 21:39:00 2751

原创 理解Android的四种启动模式

一:前言四种模式分别为standard, singleTop, singleTask, singleInstance。自己应该明确一个概念先,single到底要single什么。每一个应用app都有一个包名,然后每一个应用都会有一个task,这个task和包名对应起来,如果要创建一个新task,名字就得不一样。一个应用会有一个包名,应用中默认有一个以包名为名字的tasktask是一个概念...

2021-12-29 14:21:00 1254

原创 Handler消息机制 笔记

这是笔记,没有源码分析和详细过程,只有自己总结出来的重点,源码分析看参考资料,前辈写的很好。一个线程,一个Looper,一个MessageQueue,多个HandlerMessageQueue单链表结构使用ThreadLocal机制保证一个线程一个Looper:https://www.cnblogs.com/--here--gold--you--want/p/15730088.html...

2021-12-25 14:11:00 567

原创 为何一个线程可以对应一个looper

一:前置知识Looper有一个变量:ThreadLocal<Looper>Thread.currentThread 打破次元壁,在应用层沟通底层,获得当前线程信息每一个Thread,不管是Android的main thread,还是自己定义的thread,总之就是一个Thread,含有一个ThreadLocalMap变量。ThreadLocalMap是一个数组,也就是说,每...

2021-12-25 11:30:00 530

原创 ViewRootImpl的连接时机

ActivityThread在使用handleResumeActivity方法调用了activity的onResume方法之后,就调用了wm.addView(decor, LayoutParams)wm其实是WindowManagerGlobal所以调用了WindowManagerGlobal.addView里面创建了view root impl,并把decor view作为v...

2021-12-24 13:29:00 306

原创 Activity启动流程 stop的理解

当启动一个activity的时候onCreate --> onStart ---> onResume当启动另一个activity的时候:old activity onPausenew activityonCreate --> onStart ---> onResumeold activity onStop当回退的时候也是这样:当要出现的activi...

2021-12-24 12:05:00 519

原创 viewmodel的存取流程

一:获取view model的代码public <T extends ViewModel> T get(@NonNull String key, @NonNull Class<T> modelClass) { ViewModel viewModel = mViewModelStore.get(key);//从一个hash map中用key取view m...

2021-12-24 10:34:00 319

原创 转 协程掌握系列 by Manuel Vivo

https://medium.com/androiddevelopers/coroutines-first-things-first-e6187bf3bb21https://medium.com/androiddevelopers/cancellation-in-coroutines-aa6b90163629https://medium.com/androiddevelopers/exce...

2021-12-23 15:46:00 166

原创 在jetpack compose中获取Application实例的方法/避免作用域结束导致协程取消

前言:想知道如何获取这个application实例的起因是关于协程的取消。于是我创建了一个Application类,并在其中创建了一个CoroutineScope的变量。class MyApplication:Application() { val applicationScope = CoroutineScope(SupervisorJob())}问题就是如何在其他地...

2021-12-23 10:07:00 1406

原创 kotlin协程问题

一:拦截器可以有多个吗不可以,因为CoroutineContext在组合在一起的时候,是从左往右累加的,具有相同Key值的Element,左边的会丢弃。而拦截都继承的ContinuationInterceptor它内部代码是这样的public interface ContinuationInterceptor : CoroutineContext.Element {compan...

2021-12-22 18:40:00 279

原创 Android触摸事件分发的原理

一:前言最近在学Android的触摸事件分发,我觉得网上说的太杂太乱,而且有很多博客都有明显的错误。什么自顶向下分发,自下向顶分发,什么拦截又一直消费什么什么之类,非常难懂。为了自己将来回顾可以更好的理解这块知识,也为了后来之人可以更好的学习,我写下这篇博客。二:说在前面的知识点击,滑动,松手都是由MotionEvent这个类来表示。屏幕上的一个事件序列是指以一个MotionEvent...

2021-12-19 15:40:00 227

原创 Jetpack Compose的Modifier顺序问题

一:前言困惑起源于这段代码Composable.clickable(点击1).clickable(点击2).size(100.dp).size(200.dp){...............}Composable是随便一个@Composable函数。结果是:点击二会应用,size100dp会应用。一开始,我试验size的时候,以为是modifier从右往左应用的,但clickab...

2021-12-19 11:12:00 619 1

原创 未定稿

一:view的自定义和compose的自定义中测量的对比自定义的view的测量和compose的自定义Layout有很多相似的地方:自定义viewcompose的Layout作用measuredWidth = resolveSize(XXXX)measurable.measure(constraints)约束宽高在一个范围内setMeasureDimension(m...

2021-12-18 21:53:00 40

原创 如何在子线程中更新UI

一:报错情况 android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. at android.view.ViewRootImpl.checkThread(ViewRoo...

2021-12-14 17:09:00 501 1

原创 view 自定义 layout模板

class TagLayout(context: Context?, attrs: AttributeSet?) : ViewGroup(context, attrs) { private val childrenBounds = mutableListOf<Rect>()//用于存储摆放子view的数据 override fun onMeasure(widthMeasu...

2021-12-13 16:36:00 200

原创 快速排序Java

代码public static void quickSort(int[] arr, int start, int end) { //start和end以下标0开始为基准 if (start < end) { int k = partition(arr, start, end); quickSort(arr,...

2021-12-10 12:08:00 236

原创 转 HashMap 中 Key 类型的选择

https://www.cnblogs.com/lihao007/p/12444193.html

2021-12-09 18:34:00 277

原创 类的==与equals()

==判断的是内存地址equals()使用类的equals方法判断

2021-12-09 17:35:00 41

原创 转:问:重写equals不重写hashCode会怎样?

https://zhuanlan.zhihu.com/p/102248677

2021-12-09 17:27:00 95

原创

一: 理论基础y一棵二叉树共 n 个结点, 按1 —— n编号, 如果一个结点序号为 i 有左孩子, 那么左孩子序号为 2 * i, 如果有右孩子, 右孩子序号为2 * i + 1二:三种二叉树遍历class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() { } ...

2021-12-09 16:37:00 45

原创 leetcode SCS 最短公共超序列

参考Longest common subsequence然后回溯dp[][] matrix public String shortestCommonSupersequence(String str1, String str2) { int m = str1.length(); int n = str2.length(); cha...

2021-11-28 20:37:00 210

原创 WorkManager笔记

基本知识您需要了解以下几个 WorkManager 类:Worker:此位置用于放置您希望在后台执行的实际工作的代码。您需要扩展此类并替换doWork()方法。WorkRequest:此类表示请求执行某些工作。您将在创建WorkRequest的过程中传入Worker。在创建WorkRequest时,您还可以指定Constraints等内容,例如运行Worker的时间...

2021-11-28 16:33:00 125

原创 implementation vs api

https://jeroenmols.com/blog/2017/06/14/androidstudio3/

2021-10-30 10:51:00 60

原创 android构建流程

https://zhuanlan.zhihu.com/p/420064922

2021-10-25 11:01:00 1350

原创 classpath 和 implementation的区别

https://stackoverflow.com/questions/34286407/gradle-what-is-the-difference-between-classpath-and-compile-dependencies/69631709#69631709简单来说就是,classpath后面的依赖进攻build script使用,是给gradle构建时用的。给code用的依赖写在...

2021-10-19 22:02:00 1874

原创 wanandroid开发日志

9月28日晚:添加了splash开始界面

2021-09-28 23:00:00 64

原创 以下部基准线对齐一行内的icon和text

TopAppBar(backgroundColor = green2) { var baseLine by remember { mutableStateOf(0f)} val topBaselinePadding = with(LocalDensity.current) { baseLine.toDp() } Icon( painter = painterRes...

2021-09-19 17:17:00 66

原创 呼吸灯

fun PreviewCustom() {// val deltaXAnim = rememberInfiniteTransition()// val dx by deltaXAnim.animateFloat(// initialValue = 0.8f,// targetValue = 1f,// animationSpec ...

2021-09-17 19:39:00 80

原创 HTTP header中的host的作用

比如,我们在地址框内输入:1.com这个网址,因为我们要访问网络的另一端是通过IP地址来定位的,所以我们要先拿到IP地址。第一步:把这个域名1.com发给DNS域名服务器,然后得到第二步中它返回的IP地址,假设是1.1.1.1。然后第三步,我们通过IP地址找到了目标主机,但是目标主机体内装有三个虚拟机,每一个虚拟机都架设了一个网站。假如这个时候没有host的话,我们就不知道请求哪一个虚拟机了...

2021-09-03 16:14:00 9745 4

空空如也

空空如也

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

TA关注的人

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