学习计划

第一周:

①学习了hashmap更具体的知识:

JDK1.8中hashmap对链表很长时的优化,当链表长度太长时,链表就转换为红黑树,这样大大提高了查找的效率。红黑树是自平衡的二叉查找树,拥有二叉树的特性,又额外增加了特性。

二叉树可能的时间复杂度是O(N),为了避免出现这种情况,使用红黑树,当新插入的数据破坏红黑树平衡时,它会重新达到平衡。

第二周:

①内存泄漏需要注意的点

内存泄漏最核心的本质是:对象不再被应用程序使用,但垃圾回收器却不能移除它们,因为它们还在被引用。

常见的内存泄漏是内部类, 单例引用。 如果单例需要传入context, 需要看是否引用这个context,而不是传入context参数就会存在内存泄漏。

②学习Eventbus源码

(1)注册:

Eventbus.getDefault().register(Object),首先Eventbus.getDefault()获得Eventbus单例,之后调用register(Object)方法, 找到Object的类的onEvnet方法。

private synchronized void register(Object subscriber, String methodName, boolean sticky, int priority) {
List<SubscriberMethod> subscriberMethods = this.subscriberMethodFinder.findSubscriberMethods(subscriber.getClass(), methodName);
Iterator var6 = subscriberMethods.iterator();

while(var6.hasNext()) {
    SubscriberMethod subscriberMethod = (SubscriberMethod)var6.next();
    this.subscribe(subscriber, subscriberMethod, sticky, priority);
}

}
遍历subscriberMethods,执行subscribe(subscriber, subscriberMethod),这个方法中主要做根据优先级把 subscriberMethod 插入到 subscriptions 中,将 eventType 放入到 subscribedEvents 中, 如果订阅方法支持 sticky ,那么发送相关的粘性事件。

第三周:

①学习Eventbus源码

反注册

在之前 register(Object subscriber) 中 subscriptionsByEventType 和 typesBySubscriber 会对 subscriber 间接进行绑定。而在 unregister(Object subscriber) 会对其解绑,这样就防止了造成内存泄露的危险。

②android适配:分区存储适配

范围:

android 9及以下不需要适配
android 10仅对targetSdkVersion>=29则会开启分区存储。targetSdkVersion小于29则不会有任何限制与android9及以下同理。
andorid 11强制执行分区存储。不允许应用读写操作非应用沙盒目录和系统公共目录下的资源文件。

适配方式:

使用ContentResolver进行文件的增删改查

第四周:

①学习源码

post(Object event)方法:

在 post(Object event) 中,首先根据 currentPostingThreadState 获取当前线程状态 postingState 。currentPostingThreadState 其实就是一个 ThreadLocal 类的对象,不同的线程根据自己独有的索引值可以得到相应属于自己的 postingState 数据。 然后把事件 event 加入到 eventQueue 队列中排队。只要 eventQueue 不为空,就不间断地发送事件。而发送单个事件的代码在 postSingleEvent(Object event, PostingThreadState postingState) 中。postSingleEvent(Object event, PostingThreadState postingState) 中的代码逻辑还是比较清晰的,会根据 eventInheritance 分成两种: 支持事件继承:得到 eventClass 的所有父类和接口,然后循环依次发送事件; 不支持事件继承:直接发送事件。 另外,若找不到订阅者,在默认配置下还会发送 NoSubscriberEvent 事件。

②glide缓存

内存作为一级缓存,本地作为二级缓存,网络加载为最后。其中,内存使用 LruCache ,其内部通过 LinkedhashMap 来持有外界缓存对象的强引用;对于本地缓存,使用 DiskLruCache。加载图片的时候,首先使用 LRU 方式进行寻找,找不到指定内容,按照三级缓存的方式,进行本地搜索,还没有就网络加载。

第五周:(2021年5月31日)

ThreadLocal的源码:

ThreadLocal类是线程本地变量。也就是说如果定义了一个ThreadLocal,每个线程往这个ThreadLocal中读写是线程隔离,互相之间不会影响的。它提供了一种线程封闭的机制。 Thread类有一个类型为ThreadLocal.ThreadLocalMap的实例变量threadLocals,每个线程有一个自己的ThreadLocalMap。ThreadLocalMap有自己的独立实现,每个线程在往某个ThreadLocal里塞值的时候,都会往自己的ThreadLocalMap里存,读也是以某个ThreadLocal作为引用,在自己的map里找对应的key,从而实现了线程隔离。

使用场景:

两个线程需要同时连接sqlite数据库,一个线程关闭数据库, 影响另一个线程。使用ThreadLocal让数据库连接不共享。

第六周:(2021年6月7日)

Rxjava使用:

使用Rxjava实现异步操作。

Observable (被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。

使用Scheduler 实现线程切换,

subscribeOn(): 指定 subscribe() 所发生的线程,即 Observable.OnSubscribe 被激活时所处的线程。或者叫做事件产生的线程。 observeOn(): 指定 Subscriber 所运行在的线程。或者叫做事件消费的线程。

Rxjava操作符:

一:创建操作 二:合并操作 三:过滤操作 四:切换线程 五:条件/布尔操作 六:聚合操作 七:转换操作 八:变换操作 九:错误处理/重试机制 十:连接操作 十一:阻塞操作 十二:工具集 十三:Flowable (2.0出来的) 非操作符

操作符有点多,暂时记不住。

注意点:

如果Rxjava正在执行,但是页面已经退出,会发生内存泄漏,解决办法:

①老项目:

老项目之前的baseActivity可能会影响到,直接得到Disposable,在activity的onDestroy调用Disposable.cancel();

②新项目:

使用RxLifecycle,调用.compose(this.<Long>bindUntilEvent(ActivityEvent.DESTROY)),在activity的onDestroy方法被调用时取消订阅。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容