3月8日
已经记不得昨天忙碌了些什么,依稀能感受到的只有残余的焦虑感。今天也是。
如果硬要说有点什么收获,大概就是把网络请求的三个类型,还有Gson,都简单的使用了一下。新的Demo在跟着书上写的简单内容一起写的话,总是能成功。但是当我尝试自己使用Coroutine的时候,一切都乱了套。
刚开始是使用的thread{}
开启子线程,然后当子线程获取到数据后,再手动调用runOnUiThread()
。虽然目前看起来没什么毛病,但是总觉得会有很大的耦合(说不清道不明,可能还是没有完全理解透彻)。后面尝试手动去阻塞线程,发现有点不太对。经常会出现空指针之类的crush。想了想还是改回之前的版本,不过因为分别尝试了HttpURLConnection,OkHttp和Retrofit三个获取数据的方法,突然发现好像可以把获取结果最后刷新UI的方法提取出来。同时,再把之前给Rv传递的List单独放在类成员中。感觉稍微的舒服了一点。
今天上***课的时候,想着再看看协程的内容。不知道是我的问题,还是郭神书中的介绍确实比较乱,依旧是没有看懂…对协程的概念真的很混乱。但还是自己尝试着用Job
对象创建了CoroutineScope
,然后用launch{}
主动开启一个协程。之后突然想到,我在协程中进行的网络请求是可以用async.await()
来做到协程内的异步。感觉顿悟(?)了。啊对,中间有一次甚至还直接把Retrofit的请求放在了主线程中,没想到直接throw Exception。大概是它里面的实现全都是suspend吧,不然不应该报错(?)。对了,中间有一次打算手动切换一下获取到的数据,然后直接把Adapter引用的List对象换掉了。后面发现数据没法更新,才知道原来那玩意儿不能换,只能把List换成Mutable,然后手动clear()和 addAll()
…好呆哦
现在对网络请求和异步的认识就是:所有IO操作都应该先放在子线程/协程中,对需要集中处理的,可以使用await()或者阻塞队列去统一处理。如果流程不清晰的,可以自己先画一遍流程图,把所有情况想清楚之后再动手coding。(中间想一出是一出的写代码,真的挺乱脑子的…)
草,猛然想起来昨天还大概的看了一下itemDecorator
。主要也就是两个方法:getItemOffset
和onDraw
。前者负责给ItemView设置出类似于pendding/margin的空白区域,后者负责在ItemView的底部去进行绘制,而空白区域可以显示出底部的内容,变相的实现了分割线的效果。
中间还涉及到了获取颜色资源的内容(ContextCompat.getColor(context, R.color.black)
,而很多文章里写的context.resources.getColor()
貌似并不能获取到Resouce/color.xml
里的结果…还没来得及弄清楚啥原因,反正当时挺烦人的)。再一个就是当时想获取R.dimen.Divider_Height
来着,但是也获取不到,只能自己手动写死一个2px的数值在里面。
对于方法的重写,发现了好像getItemOffset
是对在屏幕内存在的view进行渲染(不过好像根据Rv的缓存机制来说貌似不是?但是我打了Log发现貌似就是这样来着),如果要加载列表下方的内容,则会对最下方要新进入屏幕的Item去设置offset;加载上方的内容也是同理。所以说列表中的所有项目都会去设置offset;但是onDraw并不和getItemOffset一样,貌似是一次性的Draw来着。我当时是发现网上看到的代码可以做到最后一个列表项不进行绘制,所以想让最后一个列表项也不进行offset。不过一直没弄成。每次调用parent.indexOfChild()
获得的都是当时屏幕中的index,而不是背后数据列表的index…可能之后有空再思考一下吧。说来也有趣,第一次发现原来Google提供了DividerItemDecoration()
,所以压根可以不用去自己实现
最后就是焦虑的部分了。大厂陆续开放暑期实习了,但是小公司大多都还是需要尽快到岗。也不知道这样拖下去,暑假能不能有实习机会。现在是又想要实习,又怕要面对实习的面试/笔试。每次上牛客都看到别人的建立贼牛逼,一堆的项目先不说,八股文和DAS都是一个个的了解/熟悉。也不知道自己前四年都干了点什么…哎。看着宝莱每天早上起来背八股,然后还有很多的新的视频资料(Java后端确实卷,资料也确实多(都是相比于客户端而言))。自己…也不知道现在这样是好是坏。身边关系好的同学和网友都说现在我的状态很不错,但是依旧很焦虑,不知道要怎么办才好。每天说学习也确实有在学习,但是总觉得进度不够,嘛…
可能还是要好好睡一觉吧。