Android
文章平均质量分 93
Web_boom
这个作者很懒,什么都没留下…
展开
-
「知识点」LiveData为啥连续postValue两次,第一次的值会丢失?
有一天,我正听着歌,开心的敲着代码,这时候小王同志急冲冲的跑过来拍了拍我的肩膀,“付老板,我这遇到一个问题,连续两次请求同一个接口,参数传的不同,但是livedata的onChange回调只走了一次,UI界面上只有一个地方更新成功了,这是咋回事啊?”一听有bug,这我可就来劲了,立马摘下耳机,“来,上代码”,“诶~ 你这是在UI层注册了一个监听,然后在请求接口的地方,利用livedata连续postValue两次。看情况你这应该是postValue搞的鬼,不急,我来模拟下场景,看看他的内部实现”。原创 2022-02-25 16:07:53 · 1490 阅读 · 1 评论 -
横屏适配方案复盘暨DialogX 平板适配指南
引言首先关于 Android App 如何进行平板适配,推进阅读文章:【Android平板适配】手机/平板二合一应用一站式适配攻略@尼特胡其中需要注意的点在这里写出来:1.如何使 Activity 不会因为切换横竖屏自动重启在 AndroidManifest.xml 中的 Activity 节点增加以下配置:<activity ... android:configChanges="screenSize|smallestScreenSize|screenLayout|orien原创 2022-02-25 13:43:36 · 844 阅读 · 0 评论 -
「Glide源码分析」
「Glide源码分析」一、主体模块二、从基本使用说起Glide的使用很简单核心代码只有一行:String url = "https://pic.netbian.com/uploads/allimg/211013/232957-16341389973a59.jpg";Glide.with(this).load(url).into(imageView); Glide#with();with(context)方法属于Glide中一组静态的重载方法,排除已经过时的方法主要有: @NonNull原创 2022-02-24 22:23:55 · 670 阅读 · 0 评论 -
《Android编程权威指南》之音频播放与单元测试(一)
《Android编程权威指南》第 20 章,本章将会学习到单元测试,所谓单元测试就是编写小程序去验证主应用各个单元的独立行为,即测试一个个的类。一、创建 SoundPoolSoundPool.Builder 可以创建一个 SoundPool 实例。setMaxStreams(Int) 可以指定某个时刻同时播放多少个音频BeatBox.kt:...private const val MAX_SOUNDS = 5class BeatBox(private val assets: AssetManag原创 2022-02-24 21:41:26 · 455 阅读 · 0 评论 -
《Android编程权威指南》之HTTP与后台任务(一)
《Android编程权威指南》第 24 章啦,本章又有个新应用啦,叫 PhotoGallery,用来获取 Flickr 网站的最新公共图片「不限版权的图片」。本章将学习 Retrofit 网络请求库,Json 数据,Gson 解析 Json 等等。一、创建 PhotoGallery 应用按照惯例,创建应用,先写下 xml 文件,这里又是用 activity 嵌 fragment 的方式。 main_activity.xml:<?xml version="1.0" encoding="utf-8"原创 2022-02-24 20:16:53 · 319 阅读 · 0 评论 -
[译]Flutter用WebView插件webview_flutter
本文翻译自pub: webview_flutter | Flutter Package (flutter-io.cn)译时版本: webview_flutter 3.0.0用于 Flutter 的 WebView提供 WebView 组件的 Flutter 插件。在 iOS 上 WebView 组件基于 WKWebView;在 Android 上 WebView 组件基于 WebView 。用法添加 webview_flutter 依赖到 p原创 2022-02-24 16:58:34 · 1375 阅读 · 0 评论 -
[译]Flutter调用原生应用打开文件插件open_file
使用要使用该插件,需要在 pubspec.yaml 中添加依赖。dependencies: #androidx open_file: ^lastVersion #support #open_file: ^1.3.0 示例import 'package:open_file/open_file.dart';OpenFile.open("/sdcard/example.txt");//OpenFile.open("/sdcard/example.txt", type: "text原创 2022-02-24 16:21:42 · 3149 阅读 · 0 评论 -
[译]Flutter Favorite之方便用户反馈的组件库feedback
本文翻译自pub: feedback | Flutter Package (flutter-io.cn)译时版本: feedback 2.4.1[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-clgiJzP7-1645606839871)(https://rawgit.flutter-io.cn/ueman/feedback/master/img/feedback.svg)]将该库用作商业产品?可以考虑成为赞助者.用于获取更好的反馈的 Flutter 包。它允许原创 2022-02-23 17:01:06 · 672 阅读 · 0 评论 -
[Matrix系列-3]: TracePlugin 之 FrameTrace 源码分析
开篇第二篇文章中,我们分析了 TracePlugin 中的 LooperAnrTrace 类。今天这篇文章接着分析 TracePlugin 中的 FrameTrace 类源码。一、FrameTrace的触发时机1.1 TracePlugin. start() 方法注意看,在 TracePlugin 类的start() 方法中,调用了所有 Trace 类的 onStartTrace() 方法:@Overridepublic void start() { // ... 省略 Runn原创 2022-02-23 15:10:48 · 648 阅读 · 0 评论 -
[Android进阶】Handler机制原理解析
Handler是Android中提供的一种异步回调机制,也可以理解为线程间的消息机制。为了避免ANR,我们通常会把一些耗时操作(比如:网络请求、I/O操作、复杂计算等)放到子线程中去执行,而当子线程需要修改UI时则子线程需要通知主线程去完成修改UI的操作,则此时就需要我们使用Handler机制来完成子线程与主线程之间的通信。Handler的一般使用步骤在明确了Android中只有主线程能修改UI界面、子线程执行耗时操作的前提后,下面一起来学习下Handler的使用步骤。在主线程中创建Handler原创 2022-02-23 14:52:24 · 8233 阅读 · 2 评论 -
AutoRegister框架分析
AutoRegister 是一个使用字节码插桩技术实现的通用注册的框架,这个框架对使用场景有一些约定。字节码插桩技术:# 看这一篇,你也可以自如的掌握字节码插桩ASM:字节码插桩的一个框架实现 - # ASM4使用手册-中文使用配置AutoRegister项目app模块中配置代码如下:apply plugin: 'auto-register'project.ext.registerInfoList = [ [ 'scanInterface' .原创 2022-02-22 20:47:28 · 560 阅读 · 0 评论 -
Jetpack MVVM七宗罪之一:拿Fragment当LifecycleOwner
首先承认这个系列有点标题党,Jetpack 的 MVVM 本身没有错,错在开发者的某些使用不当。本系列将分享那些 AAC 中常见的错误用法,指导大家打造更健康的应用架构Fragment 作为 LifecycleOwner 的问题MVVM 的核心是数据驱动UI,在 Jetpack 中,这一思想体现在以下场景:Fragment 通过订阅 ViewModel 中的 LiveData 以驱动自身 UI 的更新关于订阅的时机,一般会选择放到 onViewCreated 中进行,如下:override fu.原创 2022-01-10 15:42:21 · 673 阅读 · 2 评论 -
一道面试题: Kotlin 中处理生产者/消费者问题的 N 种方式
生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个缓冲区(Buffer),生产者往 Buffer 中添加产品,消费者从 Buffer 中取走产品,当 Buffer 为空时,消费者阻塞,当 Buffer 满时,生产者阻塞。Kotlin 中有多种方法可以实现多线程的生产/消费模型(大多也适用于Java)SynchronizedReentrantLockBlockingQueueSemaphorePipedXXXStreamRxJavaCoroutineFlow原创 2021-08-31 15:12:43 · 273 阅读 · 0 评论 -
你们做Android也这么闲吗?真的受不了了,想跑路!
上周六,跟一个许久不见的大学同学一起约了个饭,因为毕业后都是做Android开发方面的工作,所以也就一直有着些联系,但线下面基却是第一次。四年同窗,一起“同床”的情谊,见了面却也很是生疏,各种寒暄、商业互捧、没话找话。终于,他的一句:“我辞职了,你那公司咋样?”,让彼此打开了话匣。毕业后,他找了一份比较清闲的工作,在一家外企做Android开发,做事流程也非常正规,大家都非常羡慕,没想到把他给闲出病来了。下面,我将以第一人称的视角,来看一下他的工作状态。我了解到,还是有很多人因为太闲的原因,而辞职的。这原创 2021-08-24 14:57:40 · 240 阅读 · 4 评论 -
面试必备:Kotlin 线程同步的 N 种方法
面试的时候经常会被问及多线程同步的问题,例如:“ 现有 Task1、Task2 等多个并行任务,如何等待全部执行完成后,执行 Task3。”在 Kotlin 中我们有多种实现方式,本文将所有这些方式做了整理,建议收藏。1. Thread.join2. Synchronized3. ReentrantLock4. BlockingQueue5. CountDownLatch6. CyclicBarrier7. CAS8. Future9. CompletableFuture10. Rx原创 2021-07-07 17:56:19 · 554 阅读 · 0 评论 -
【View系列】手把手教你解决ViewPager2滑动冲突
常见场景浅析为了方便大家更好的吸收本篇博客的知识,先描述一个常见场景帮大家理一理事件分发流程。这个场景大家肯定有见过:给RecyclerView的Item设置一个点击事件,点击这个Item通常会有两种情形:快速点击,直接触发Item的点击事件手指按到这个Item然后开始滑动,这个时候RecyclerView跟着手指开始滑动了场景1 我们可以简单理解为:快速点击的时候,由于Item设置有点击事件,导致View的onTouchEvent默认返回true,然后滑动距离又小于设备的scaledTouch原创 2021-05-17 21:41:40 · 2048 阅读 · 1 评论 -
【View系列】View事件分发源码探索
前言Android的事件分发机制是老生常谈的话题了,网上好多介绍这个的。自己之前也看过挺多博客上介绍的,但是停留的状态一直是工作中有点抗拒这一块内容,给别人讲的时候也一知半解 哈哈哈哈(大家是不是也是这个状态)。。。。追究其根本原因是 纸上得来终觉浅,绝知此事要Read the fucking source code。今天略微有点空,决定要撸一遍相关源码,加深一下自己对这一块理解。结论为啥直接说结论呢? 想让大家先知道一下结论,看完结论后,再跟着源码节奏 印证一下结论的正确性。首先,和事件分发相关的方原创 2021-05-14 20:06:26 · 120 阅读 · 0 评论 -
Looper.loop()引发的惨案
1、案件描述在一个安静的下午,一妹子在`技术交流群里反馈(群号:977438066),自己开发的app,账号被挤下线时,重新登录到首页后,发现有一个请求,代码执行了,却没有任何回调,看得出,妹子很着急。what ??? 还有这种事?原本安静的群,一下活跃了起来,男同胞们一顿狂猜,我总结了下,如下:会不会请求代码没执行,妹子自己搞错了吧?发请求前,出现异常,代码被中断运行?请求过程伴随着页面跳转,导致页面销毁时,请求被自动关闭?请求过程出现异常,被RxJava全局异常捕获了,并吃掉原创 2021-05-08 21:07:25 · 324 阅读 · 0 评论 -
带你全面了解 Flutter,它好在哪里?它的坑在哪里? 应该怎么学?
回顾了这段时间解答关于 Flutter 的各种问题后,我突然发现很多刚刚接触 Flutter 的萌新,对于 Flutter 都有着不同程度的误解,而每次重复的解释又十分浪费时间,最终我还是决定写篇文章来做个总结。内容有点长,但是相信能帮你更好地去认识 Flutter 。Flutter 的起源Flutter 的诞生其实比较有意思,Flutter 诞生于 Chrome 团队的一场内部实验, 谷歌的前端团队在把前端一些“乱七八糟“的规范去掉后,发现在基准测试里性能居然提高了 20 倍,机缘巧合下 Flu原创 2021-04-30 15:36:19 · 294 阅读 · 1 评论 -
RecyclerView 性能优化 | 把加载表项耗时减半 (一)
构建 Android App 界面时,RecyclerView 出场率很高。它的加载性能影响着用户体检。本篇分享一次完整的 RecyclerView 性能优化过程:从用工具定位问题,再不断尝试各种优化方案,最终达成 50% 的性能优化。这次性能调优的界面如下:界面用列表的形式,展示了一个主播排行榜。预优化,先量化这个排行榜嵌套在一个 ViewPager 中。最初发现性能问题是因为滑动到该界面时,ViewPager 指示器的平移动画卡了一下,掉帧了。虽然卡顿是肉眼可见的,但若不能量化卡顿,就无法量原创 2021-04-27 20:49:32 · 653 阅读 · 0 评论 -
真牛皮!ListView流畅度翻倍!!Flutter卡顿分析和通用优化方案
导语:最近因为在做Flutter中相关的性能优化,在收集很多性能数据之后发现ListView组件在一些场景下(例如加载更多)容易引起页面卡顿,看到了闲鱼的Flutter 高性能、多功能的全场景滚动容器。但奈何该组件没有开源,因此准备从文章给出的思路尝试研究和开发一个高性能的ListView。这个系列预计会分为4-5篇文章,前两篇主要对现有问题研究和分析,后三篇实际的进行开发。一、ListView存在性能问题么?日常业务开发中,我们会在多种场景下使用ListView组件。使用它可以快速完成一个列表页面,原创 2021-03-18 21:25:25 · 6191 阅读 · 2 评论 -
真狗!黑锅竟然让妹子背,你们大厂就是这么对待程序媛的?
这两天有一个学妹找我求助,在大厂工作,被提前谈了绩效,团队的优化名额让她背了,很不服气。想跳槽,可主管又说,她很优秀,要让背也确实没得选择的选择,因为她是新人,又是女孩子,确实没人家做的多,让她忍一忍,等来年想办法给她晋升。可这事越想越气,跟我聊着聊着就开始哭得不行。大家都懂,女孩子嘛,我都是非常有耐心的。因为技术菜就给差?因为别人工作年限久、技术高就给优?这个主管或许只是个怂X。一、什么是真正的公平?有些管理者,害怕核心骨干离职,哪怕他们磨洋工,啥不干,也照样得供着,因为很多老代码是他们开发的,原创 2021-03-11 16:07:17 · 280 阅读 · 6 评论 -
老板:当初看你说“性格开朗”才要的你,怎么一提加班就这么“想不开”!
我“性格开朗、责任心强、善于组织、协调和沟通能良好地与团队合作”?虚!比肾虚公子还TM的虚!别再把面试官当傻子了,花个3分钟好好给自己补一补吧!一、如何打造一份有吸引力的简历首先来看怎么写简历。大部分候选人都是倒在了简历筛选这一关。HR 或者面试官一般只会在简历上停留 10~30 秒,如果简历不吸引人,再优秀的候选人也会错失良机。1. 结构清晰、主次分明简历可以分为基本信息、项目经历、自我总结等部分。项目介绍,建议按照发生时间倒序来排列,最新的项目放在最前。重点的项目、最能体现你能力和工.原创 2021-03-02 19:33:43 · 298 阅读 · 1 评论 -
“我天天curd,怎么才能成长?” 老板:别长了,你这样挺好!
你要真是天天curd,怎么可能会有成长?怎么滴,怕成长起来了,老板没钱给你涨工资呀?那您可真是“赤胆忠心”。每一个IT公司可能都缺不了一个天天curd的“人才”,但愿那个人不会永远都是你!(想啥呢,能撑过35岁吗?还有永远)起因“天天在那curd,能有啥出息”“你就是一个curd boy”“就你叫curder啊”“你不写代码,你只是代码的搬运工”上面几段话,程序员是不是经常听到或者看到。这几句话说明了什么?高度概括能力:用几个单词组合,就概括了多数程序员日常的工作情况。自嘲:自嘲有时是.原创 2021-02-25 20:24:48 · 717 阅读 · 4 评论 -
别了,腾讯!别了,深圳!我去老家当富豪了!
昨天晚上,和老朋友阿辉约了一块吃饭,他告诉我他要离开鹅厂了,也要离开深圳了!回来后,心情复杂。阿辉和我一样来自湖南农村,只不过他本科毕业后就来到了深圳,那时是13年。一去深圳就在知名大厂腾讯做Android开发相关的工作,成为了同龄人眼中的佼佼者,让很多同学和朋友无比羡慕,鹅厂哇,BAT光环哇,阿辉那时可真是春风得意马蹄疾,一日打卡深圳各个知名地点。世界之窗、海上世界、大小梅沙,那时的风吹在脸上,都感觉是幸福拂面。无忧无虑,深圳以无比包容的双手,让年轻一代的毕业生,在这里能够展翅飞翔。“来了,就是深.原创 2021-02-22 20:07:54 · 7609 阅读 · 32 评论 -
张一鸣:“如果是你偶然发现青霉素能消炎,你是先考虑用它去救人还是赚钱呢?”
从2014年4月至今,我即将度过在字节跳动的第7个年头。在节前,作为老员工很荣幸受邀参加了公司组织的“老板面对面”座谈会,静距离对话CEO张一鸣。整个过程下来,没有鸡汤也没有大饼,满满的都是干货,特此在经过公司允许的前提下,进行了一些提炼总结,写下这篇文章上,分享给诸位奋斗者,希望也能给你在学习和工作当中一些启发和帮助。1. 大学时代最重要的三个收获2001年我考入了南开大学,起初大学的生活是让人有点失落的,但慢慢地从安静朴素的校园和踏实努力的氛围中,我还是找到了自己的节奏。大学期间我主要在做三.原创 2021-02-20 17:18:23 · 7339 阅读 · 29 评论 -
聊聊 Java 和 Android 的集合框架(第一回)
本系列文章会陆续对 Java 和 Android 的集合框架(JDK 1.8,Android SDK 30)中的几个常见容器结合源码进行介绍,了解不同容器在数据结构、适用场景、优势点上的不同,希望对你有所帮助一、数组和链表很多集合框架在底层结构上都使用到了数组和链表这两种数据结构,它们在数据存储方式和优劣点这两方面有着很大区别,这里先来介绍下这两者的结构和区别1、数组假设现在有六个元素存放在数组中,则数组在内存中的存储结构就如下所示数组是一块连续的内存空间,元素按照坐标索引依次排列,可以直.原创 2021-02-18 20:33:38 · 210 阅读 · 0 评论 -
“前两家公司倒闭真不怪我!” 看我如何非酋化身offer收割机!
写在前面的话我是双非本科15年毕业的,毕业之后就一直在做Android相关方面的开发工作,到18年经历了两家创业公司,一家工作了不到半年老板就跑路了,一家工作到18年初,因为运营不当倒闭了(一度怀疑自己是不是去哪家公司就得哪家倒闭)。自上家公司倒闭后,只身来到深圳寻求发展,因为之前待的小公司不是老板跑路,就是公司倒闭,所以这次就想找个大公司,想稳定一点,时大公司技术底蕴也比较强,想多学习学习,提升自己。前后大概经过了1个月左右,找到了一家公司,虽然不是大厂级别,但我所在的技术团队也有大几十号人,相比于我之原创 2021-02-07 17:31:48 · 1714 阅读 · 3 评论 -
“离开公司,你什么都不是!” 对程序员来说平台真的比技术还重要吗?
“离开公司,你什么都不是!”这种流行的价值观,在千千万万的老板和职场人的心中席卷而过,激起层层波澜。“人最大的悲哀就是错把平台当本事”,此言一出,仿佛是为广大老板们代言,使其大呼畅快,因为心中的感慨找到了出口,甚至成为了许多老板开会时提点员工的名言警句。这样的观点有着明显的倾向性,放大了平台的作用,收缩了人的价值。但凡都进入这个平台,就说明我们是有能力的,这本身就是个人本事的一部分。能够进入一个牛逼的平台,就已经打败了很多人。比如,你校招进了阿里,那就是牛逼,比60%的毕业生牛逼。但三年、五年原创 2021-02-07 17:16:17 · 4688 阅读 · 10 评论 -
一篇就够了,全网最全计算机网络基础总结攻略
定义 计算机网络的各层 + 其协议的集合作用 定义该计算机网络的所能完成的功能OSI体系结构、TCP/IP体系结构、五层体系结构OSI体系结构:概念清楚 & 理念完整,但复杂 & 不实用TCP/IP体系结构:含了一系列构成互联网基础的网络协议,是Internet的核心协议 & 被广泛应用于局域网 和 广域网五层体系结构:融合了OSI与TCP/IP的体系结构,目的是为了学习 & 讲解计算机原理低三层为通信子网,负责数据传输 高三层为资源子网,相当于计算机系统,完成数据处理;传输层承上启下。原创 2021-02-04 20:40:32 · 12571 阅读 · 0 评论 -
“你们程序员不就是修电脑的吗,你牛什么牛?” 确实,我一开始也这么认为!
“这科技越来越发达,你就学电脑吧,你二姨儿子在县城里就是自己开店子给人修电脑,能挣不少钱!”—— 父亲大人 2009年7月引子最近一直在思考,作为一名软件开发工程师,到底应该如何实现自我成长,是否有捷径而言?其实断断续续有过很多思考,也有和各种年龄段的同学们做过不少交流,结合自身的经历,有一些感悟和思考。本文可能可以适用到其他端,不过由于自己是一名 Android 开发工程师,所以就姑且从一名普通的 Android 开发工程师的角度来进行表述吧。整篇文章可能读下来会比较啰嗦和白话,但句句真言,字.原创 2021-02-02 17:49:46 · 14217 阅读 · 34 评论 -
妈蛋!HR你搞我,我的缺点就是身体不好不能加班,怎么了?
阎王易抖,小鬼难缠,面试栽在HR面上的HXD来这里报道了!前言很多程序员到新公司面试时没有注意到一些小问题,从而导致HR直接将自己pass掉,又或者是沦为了备用的垫底存在,那么这几个导致你被pass的小问题你是否注意过?下面请听我一一道来,希望能对大家有所启发。牛头:你为什么离开上家公司?进行社招面试时,这个问题几乎是必问的。其实这个问题主要是想试探一下求职者的核心诉求,并借此预估一下求职者将来在本公司的稳定性。常见的答案也就几种,无非就是对薪酬不满意、工作氛围不够、环境不好、干的不愉快。但是.原创 2021-01-30 22:11:42 · 5140 阅读 · 21 评论 -
Android性能优化:绘制优化
一、Android系统显示原理Android的显示过程可以简单概括为:Android应用程序把经过测量、布局、绘制后的surface缓存数据、通过SurfaceFlinger把数据渲染到显示屏幕上,通过Android的刷新机制来刷新数据。也就是说应用层负责绘制,系统层负责渲染,通过进程间通信把应用层需要绘制的数据传递到系统层服务,系统层服务通过刷新机制把数据更新到屏幕。1、绘制原理应用层在Android的每个View都会经过Measure和Layout来确定当前需要绘制的View所在的大小和位置,然原创 2021-01-28 20:12:47 · 1037 阅读 · 0 评论 -
阿里高级面试题:如何利用startActivityForResult返回数据到前一个Activity?(附源码+解析)
在Android里面,从一个Activity跳转到另一个Activity、再返回,前一个Activity默认是能够保存数据和状态的。但这次我想通过利用startActivityForResult达到相同的目的,虽然看起来变复杂了,但可以探索下startActivityForResult背后的原理和使用注意事项。要实现的功能如下:从Activity A将数据传到Activity B,再从Activity B中获取数据后,再传回Activity A。在Activity B中添加一个“回到上一页”的Butt.原创 2021-01-25 16:56:54 · 318 阅读 · 0 评论 -
阿里面试官:说说多线程并发问题
多线程并发问题,基本是面试必问的。大部分同学应该都知道Synchronized,Lock,部分同学能说到volatile、并发包,优秀的同学则能在前面的基础上,说出Synchronized、volatile的原理,以及并发包中常用的数据结构,例如ConcurrentHashMap的原理。这篇文章将总结多线程并发的各种处理方式,希望对大家有所帮助。一、多线程为什么会有并发问题为什么多线程同时访问(读写)同个变量,会有并发问题?Java 内存模型规定了所有的变量都存储在主内存中,每条线程有自己的工原创 2021-01-18 20:10:17 · 308 阅读 · 0 评论 -
面试官:今日头条启动很快,你觉得可能是做了哪些优化?
前言网上关于启动优化的文章多不胜数,内容千篇一律,大都是列举一些耗时操作,采用异步加载、懒加载等。而在面试过程中,关于启动优化的问题,如果只是很表面地回答耗时操作应该放在子线程,显然太过于普通,无法跟竞争者拉开差距。如何让面试官知道你的“内功深厚”,那肯定是要往原理层面去回答。本文重点还是关注原理,冷启动优化这个问题能延伸到很多原理层面的知识点,本文比较有意思的地方是通过反编译今日头条App,研究大厂的启动优化方案。讲启动优化之前,先看下应用的启动流程一、应用启动流程应用进程不存在的情况下,从点原创 2021-01-15 20:51:24 · 345 阅读 · 0 评论 -
面试官:简历上最好不要写Glide,不是问源码那么简单
这次来面试的是一个有着5年工作经验的小伙,截取了一段对话如下:面试官:我看你写到Glide,为什么用Glide,而不选择其它图片加载框架?小伙:Glide 使用简单,链式调用,很方便,一直用这个。面试官:有看过它的源码吗?跟其它图片框架相比有哪些优势?小伙:没有,只是在项目中使用而已~面试官:假如现在不让你用开源库,需要你自己写一个图片加载框架,你会考虑哪些方面的问题,说说大概的思路。小伙:额~,压缩吧。面试官:还有吗?小伙:额~,这个没写过。说到图片加载框架,大家最熟悉的莫过于Gli原创 2021-01-14 20:28:26 · 347 阅读 · 0 评论 -
Android主流三方库源码分析:Leakcanary
一、原理概述首先,笔者仔细查看了Leakcanary官方的github仓库,最重要的便是对Leakcanary是如何起作用的(即原理)这一问题进行了阐述,我自己把它翻译成了易于理解的文字,主要分为如下7个步骤:1、RefWatcher.watch()创建了一个KeyedWeakReference用于去观察对象。2、然后,在后台线程中,它会检测引用是否被清除了,并且是否没有触发GC。3、如果引用仍然没有被清除,那么它将会把堆栈信息保存在文件系统中的.hprof文件里。4、HeapAnalyzerS原创 2021-01-13 20:58:02 · 332 阅读 · 1 评论 -
Android主流三方库源码分析:Dagger2
前言上一篇,笔者详细地分析了Android中的依赖注入框架ButterKnife,使用它帮助我们解决了重复编写findViewById和setOnclickListener的繁琐。众所周知,当项目越来越大时,类之间的调用层次会越来越深,并且有些类是Activity/Fragment,有些是单例,而且它们的生命周期也不是一致的,所以创建这些对象时要处理的各个对象的依赖关系和生命周期时的任务会很繁重,因此,为了解决这个问题Dagger2应运而生。相比ButterKnife的轻量级使用,Dagger2会显得更重原创 2021-01-11 20:11:39 · 254 阅读 · 0 评论 -
Java培训出身,今获阿里Android岗offer,大专学渣的“登天”之路!
我的情况这里简单说一下自己的情况,大专学历,之前学的机电,然后参加一个 Java 培训,培训之后,自己发现要做好 javaee 开发需要用到的知识太多了,然后,自己刚好那个时候接触到 android,于是,就想做 android 开发。第一份安卓工作,自己进去差不多就是实习生的身份,因为公司给学习机会,可以一边学习,一边跟着做项目,所以,到现在还是很感谢当初第一份工作,可以说没有第一份工作机会,也就没有我的“今天”。当然,说到刚开始找工作,因为没有 android 开发经验,去网上搜了很多职位,投了简原创 2021-01-07 16:35:00 · 1408 阅读 · 4 评论