学跟 boss 还是学自定义 vivo? 这个问题从我去年发第一个跟 boss 主题的视频到现在一直都有人问我这个问题背后其实表达了一种担忧,会不会等我学完自定义 vivo, 他却过时了?大家好,我的任务见。朱凯 最近情况比较特殊,我被封在小区里面了,虽然办公室就在马路对面,但是咫尺天涯我依然拿不到我的摄像设备,所以今天就用手机来录一期。 今天来跟大家聊一聊学跟 boss 还是学自内命的问题。首先我们确定一下前提,这是个个人职业发展角度的讨论,也就是所谓的利益导向, 关于跟 boss 合作的音乐哪个更好,或者我更喜欢哪个,在这个视频里面不做讨论,大家更关心的是现在学哪个?如果让我简单直接的回答 自定义率,但这个话题他不是一句话这么简单,如果你打算做出最合适自己的决定,你最好把整个视频看完。首先我们来做一个对未来的展望, 跟 boss 作为安卓官方给出的新的意外方案,未来可以取代自取代 vivo 的方案吗? 跟 boss 是基于 view 的系统的,它原理是通过一个自动音域的 view 去对它的 on measure, on layout, on draw 啊, despatch, such event 这些等等方法进行深度的定制,来实现在同一个 view 的内部完成整个 usy 组建术,这样的效果也就是什么。 在看 boss 的代码里面,你写的一个包含了多层复杂组件的完整界面,实际上他有可能全都 会会知道的同一个 vivo 上,并且触摸事件也都是由同一个 vivo 来进行实际的承载和识别的, 那么由于这样的底层原理,跟 boss 是不会有能力上面的天然限制的,也就是传统育方案能做的事跟 boss 全都可以做,比如各种复杂的动画手势,嵌套的多层级布局,跟 boss 都可以做到。 这个我在读根部代码之前还有一点打鼓,但是在我读完他代码之后,我是非常确定的 跟 boss 没有做出对等实践的。只有 surface view 和 texture view 这两个类,他们是用于高速刷新的内容的,比如说视频播放或者相机的取景器界面。你在写跟 boss 代码的时候,如果想用到他俩的效果,那你是找不到对 的跟 boss 组建,而是需要老老实实去用原声的 surface view 或者 texture view, 但是这个是因为它俩的核心并不是 view, 而是安卓所提供的那一套跟 surface 类相关的显示系统。所以不管你用跟 boss 还是不用跟 boss, 这俩东西 都是单独学的。换句话说,就算不用跟 boss, 有几个人知道怎么用 surface 就是这道理。所以从原理的角度来看,跟 boss 还是有能力完全取代 vivo 的。那么下一个问题就是,这件事真的会发生吗? 跟 boss 理论上能有能力取代 fu 是吧?但他真的未来会取代 fu 成为写写 ui 的主流做法吗?首先我觉得是 会的,跟 boss 发展到现在,虽然还没有达到完善的形态,比如说传统的系统的某些官方组建或者开源组建,跟 boss 里面还没有对应的实现以及滑动组建的性能,现在和传统的 recycle view 还有一定的差距,但是 到现在为止,跟 boss 和和 vivo 系统的这些差距已经没有不可弥合的了,只要给他几年时间,这些差距都能补齐。跟 boss 这个东西, 他最大的风险在于官方开发了几年之后,发现他的坑太大了,怎么都填不平,最终气坑宣布砍掉跟 boss 这个项目,让大家回到入区官方起坑,这个是 comeboss 最大的风险,但是我可以告诉大家,现在 comboss 已经迈过这个坎了,他现在一流的都是一些 靠时间来慢慢打磨就可以解决的小问题,再加上安置官方态度也是非常坚决,要让 come boss 替代 vivo 成为新的意外方案,所以 come boss 取代 vivo 已经是必然会发生的事情了。但是 有一个问题是,这种替代短期内并不会完成,为什么?因为当下几乎所有公司的现有代码都是基于 view 系统的,你写新代码当然可以选择 comebook, 但是老代码的维护的时候不还是要和 view 打交道吗? 是吧?不过这个其实也和环境有关系。我们国内有一个情况是巨型 app 比较多,一个软件他的规模越庞大,他转身就越慢。那些巨型 app 他本 本身就已经非常复杂了,你往里面加任何一个新移来,都会进一步增加他的复杂度,更不用说跟 boss 这种 usb 他的接触。一定不是一个所谓的大规模蠢构就替换完成了,没有人敢这么干,肯定会是一个渐进式的替换过程, 今天替换这个界面,明天替换那个界面,那么对于大项目来说,就会在相当长的时间里面,团队需要同时面对两种意外方案进行开发,这样一是增加了出问题的风险,二是会长时间降低团队的开发效率。 跟 boss 是提提升开发效率对吧?但是在切换过程中他是降效的,所以你会发现大公司很多都已经在尝试跟 boss 了,但是没有一个是 已经进入了全面替换的流程了的。这个国内跟国外公司都是这样的,而我们的大公司往往哎的规模比国外的要大很多,这个大家应该知道, 所以在接下来的几年,我们大公司肯定是会在谨慎的探索中慢慢的切换到肯 boss。 那么回到开头的问题,学哪个?我的观点是,对于当下这个时代,你如果有时间双休,跟 boss 有合资定律,两个都学是对我们的职业发展最负责的选择。而如果你的时间不够,只能先学一个,那么去学自定义 view。 虽然我现在有一门跟不走的课程,但是我还是得说这玩意是面向未来的,现在从找工作的角度考虑,最硬的还是自定义。 其实我对这门这门跟 boss 课程的期待,他也是面向无改造,虽然他现在的销量已经大大超出我的设想了 啊。另外,有些人学坑 boss 是为了吃时代红利,是想在早期成为一个坑 boss 的高手,然后出名啊,或者在公司做坑 boss 方向的顶梁柱啊什么的。这个我觉得没问题,那你现在就学是可以的,但是这就是另一个思维方向了。 嗯,那好,关于 come boss 学科 boss 还是学资金没有,今天就调到这。如果你喜欢我的视频,还请点赞、关注、收藏、转发,你们的支持对我非常重要,我是人工线,我不和你比高低,我只祝你成长。
粉丝3610获赞1.2万

是不是看着很不错的钟表,但是这个表盘上数字怎么怪怪的? 正常应该是数字都水平的, 看我怎么表演。 精彩即将到来, 嗯, 是不是我们解决?

大家好,最近我朋友面试,就是说面试的安卓开发,就是说他把那个面试题发了我一下,然后我看了一下问的内容都有哪些,然后我分享一下给大家。每家公司问的都不一样,我就 挑几个来说一下都问的什么。比如他就问那个尔维利斯的跟那个林克利斯的的那个区别,还有那个比特 map, 还有那个格莱的缓存策略, 还有那个汉德兰,这个汉德兰又被问到,还有自定义 vivo 又被问到,还有那个自定义 vivo, 还有那自定义 vivogo, 它的区别 就这些题,就是我大概看了一下,他给我发的还是蛮多的,我觉得有很多东西其实我也不怎么会因为这个东西把古文 有东西是需要备的,有东西在项目中其实是用不到的,比如还有那个什么用过哪些设计模式,观察这模式有没有用过。这个的话其实就最经典的 mvm 当中的 live data, 其实就是一个他声明的那个就是变量,就是一个被观察者, 就是可以变化的一个数据数据模型。然后的话看还有哪些啊?就是 web will 和 gs 交互用的什么方法,这个的话其实正常项目开发的话 根本就不会记得,你现在让我说我也忘了,想不起来,反正那一堆方法一设置,然后就 ok 了,然后说介绍一下项目中的基础亮点,这个就是要说项目中的问题了,然后的话 还有 app 的日活,还有那个开始率,就是异异常率,这个还有一个偏季 gpeg, webp, 这三者有什么区别?这三种图片有什么区别?你看问的问题还有二分查找, 这些就是小算法吧,属于比较基础的一些东西,但是只有二分查照,还有什么猫猫培训啊,这些东西面前如果不看的话还真的是会忘的,就是会想不起来,长时间不写,还有自定义 vivo 的那个流程,还有事件分发 这些东西,还有还比如,比如,还有那个 ohoahtp 的那个原码分析,什么责任链模式啊,然后拦截器啊,这些东西面试前都是要准备的,准备一下把古文简单背一背,还有 cos 链接东西。 好了,今天就分享这点面试题,反正刚才我说到的都是一些比较重要的一些面试题,把它分享出来供大家参考一下,看就是现在面试专注开发都问哪些问题。好,谢谢大家。


啊,这一集我们来讲一下 viewmodel, 那么 viewmodel 呢,是属于 android jetpack 这个库里面的一个类。 android jetpack 呢是一套比较新的一个库,他呢最早呢是在二零幺八年 google io 大会上发布的,我们从那个呃 android 开发者的这个首页上看,这个 jetpack 呢,是在这个一级目录上, 那我们也可以看到他的这个地位是比较高的啊,在这个一级目录下,那我们点开来看一下, 好,这个 jetpack 他的 一个 logo 呢,是一个看到没有,一个安卓的机器人背上了一个火箭,一飞冲天。 那么这个寓意呢?我们看一下 google 对这个 jetpack 的描述呢,是这样的,他呢帮助我们的开发者更加高效快速的开发出优质的代码,减少代码的重复性, 能够呢将复杂的任务模块化,让我们的开发者呢更加专注于应用的本身。 那么同时呢,这个 jetpack 他又称为 android x, 这个酷, 他呢是独立于 android 的底层 api 的,所以呢他更加灵活,维护跟更新的速度呢,也会比 android 本身要更快。那么现在呢,一般我们普遍呢认为这个 jetpack 这个酷呢,就是 google 官方引导下的我们安卓的开发的未来的一个指引跟方向。所以对于现在学习安卓的开发的人来讲呢,我们一定要比较重点留意这个这一套东西啊,关心他啊,学习他, 那么这一套东西本身也是个比较庞大的一个库,它分为四个模块,第一个是称为 foundation, 第二个是 architecture, 第三个 behavior, 第四个 ui, 那我们今天说到的这个 view model 就是属于这个 architecture 这个模块里面的一个 类啊,在这里 view model, 那么顾名思义呢, model 在我们的程序设计的框架中,就是一个对数据的一个模型吧,那么顾名思义,我们 viewmodel 它的作用呢,就是将我们 view 中 的 view 就是我们的界面,将 view 中的数据给它,模块给它独立出来,对它进行单独的管理,那么从而呢使得我们的控制器就是我们的 activity 或者是那个 fragment, 这两个呢是称为我们的控制器 变得更加简单,他们只需要呢专注于控制界面的逻辑本身以及响应用户的操作就可以了,而不需要去管理界面上的复杂的数据,这对于当我们的界面比较复杂的时候呢,这种分离跟抽象呢,其实是非常有用的。 此外 view model 呢还有个特性,它呢是负责管理一个屏幕上的数据,当我们的 activity be destroyed 或者重新 created 的时候呢,数据呢不会丢失啊,像我们上一集讲的,当系统发生这个 叫做 configuration change 的时候,比如我们切换系统的语言或者屏幕旋转的时候,如果是采用 viewmodel 来管理的数据呢,它是不会丢失的, 那我们呢也就意味着我们不需要采用上一集的那种方式去手动的去存储,然后呢去读取这个数据啊,会非常方便。那么最后一点呢,就是我们的这个 vivo model 还可以跟这个 这里有另另外一个类叫做 life data, 这两者的配合呢将会实现一个非常有用的功能,就是对数据的监听,所谓 life 就是一个活活的数据吗? 那么对数据的监听呢,就是当我们的数据本身发生变化的时候,我们的就可以呢通过这个监听来使得我们界面的内容呢会自动的得到刷新, 这会非常方便。另外呢他配合这个 room room 这个类呢,是一个用于处理这个 sq light 这个数据库的一个中间键啊,那么就可以呢来负责我们数据的存储啊,所以呢这一块内容呢是非常有用的啊。 好,那么以上呢就是关于这个 viewmodel 的一个简锐的介绍,接着呢我们通过一个简单的例子来体会一下这个 viewmodel。 好,我们创建一个例子,在这个例子呢,我们把它叫做 view model 啊,第一个 test, 由于我们这个要需要 jetpack 这个类,所以我们这里把这个勾上, use android x 啊,这 这个库把它勾上。好,那么我们这个例子是做一个什么呢?做一个非常简单的在我们的界面上呢放置一个标签,然后呢再放置两个按键, 这两个按键呢,我们按下去的时候呢,他就会对我们的这个标签上显示的数字呢进行耒加,其中一个按键呢是加一,另外一个按键加二啊,我们这个功能非常简单,我们把这个界面稍微调整一下, 把它放到上面一点,然后这两个按键呢也给他连一下啊, 好让他稀疏一点。那么同时呢,我们处理一下这里的这些名称啊,第一个给他一个名称,这个白柳叫做 welcome 啊,其实不设都没关系吧。好,这个按键,这个叫把疼一,我的内容呢是叫做加一下一个把疼二, 我内容呢,他显示加二。好,那么这样的告诉用户,我按下这个键是加一,按下这个键是加二啊,然后我来创建一个这个 叫做 viewmodel 啊,我们点这里,点中我们这个包的名称啊,右键 new java class。 这个呢,我把它叫做 my viewmodel 啊,我们 java 的对类的命名呢,一般采用这种叫做开幕 case, 每一个单词的第一个字母呢,大写 好,它的继承于这个 super class 呢,就是我的这个 view view model 啊,这个不要选错,就是这个。 那么由于我们这个例子非常简单,我们呢以最简单的形式出现。我们这个 vivo mode 呢,只管理一个数啊,把它声明为帕布力克, 类型是 inter 整数。这我把它叫做 number 啊,给它初始化为零。好,我只管这个数啊, 把它声明为 public。 之后呢,我这个 satagat 呢,都不用写了啊,直接可以对这个玉兰来进行操作。 好,然后我们回到这个家吧这个文件中。那我们这里呢,就需要呢定义一个这个 view model 的对象,它的类型是 my viewmodel 这个对象,我把它叫做 my viewmodel, 这个叫做 view model providers。 我点按下这个类啊,现在他不认识,是红色的吗?我点这里的 啊,他这里没有出现这个酷的啊,建议啊,那我这里手动添加一下吧。啊,需要添加一个酷的知识,就是 in pot android x 点 life cycle life cycle, 点 view model providers 啊,这个酷, 那么这个库你按了之后他还是红色的,你再再点一下要爱的 dependency。 好,我们需要这个 gradal 呢,给他们同步一下 啊,你按下这个,这里会显示这个 grade 重新同步,那么他会把这个库呢给他下载下来,加载到我们这个项目里面。好,有了这个之后,我们就可以写下面这个句子了啊,我让这个 my viewmodel 等于 viewmodel providers 啊,这里千万不要写错啊,因为有另外一个 view model provider 跟他很像啊,我们要用这个啊 providers 点 off this, 然后后面呢是点 get my view model 点 class, 这样呢就创建了一个 viewmodel 的对象。好,那么我们呢下面就可以使用它了啊,那么有了这个之后,我们剩下的变量呢,也要观念一下,有一个 text view, 这个叫 text view, 还有两个 button, button 一跟 button 二,然后呢我们这里呢 text view 等于发音的 view, 两个 button 的一样来写一下 好,完了之后呢,我们对这两 两个 button 的写两个事件, button e 点 setter unclick listen, 你有 view 点 unclick listener, 那么由于这个 button 一呢,就是对它加一嘛,所以就是 my view model 点 number 加加, 那么加完之后呢,我们还需要呢刷新我们的界面啊,那么就是我们的 text view 点 set text 啊, set text, 这里呢是需要翻一个 string, 那么我取回来的数据呢,是一个 int, 所以我需要要把它包装一下,用到这个 string 的一个静态方法, dream the value of my viewmodel 点盖点 number, 那么这样呢,就将我们的这个数字呢从 取回来,显示在我们的这个 text view 上面,同理处理第二个案件, button 二点 set on click listener 啊,操作类似,只不过这里呢是加等于二啊,他是加二,然后呢是 text of you 点,这句话一模一样。 好了,那我们呢就写完了啊,我们来运行一下, 好,运行一下,我们看到这里进来,我加一加二,那么这个操作呢?是正常的啊, 然后我翻转一下屏幕啊,大家注意到我这里并没有写那个 safe, 没有利用这个我们上一集讲的这个方式来存储,那么当我的屏幕翻转的时候呢?我们看看, 嗯,他又丢失了,这个丢失的原因呢?其实并没有丢失,是因为我们这里漏了一句话啊,就是当我们的这个 uncreate 初始的时候啊,再写一句话,就是在这里啊,我们 text view 点 set text, 那么 string 点 value of my, 重新创建的时候,我也需要呢,是吧?取回这个数显示在上面啊,重新来一下啊,这下就没问题了, 我先把它还原 number, 这下就没问题了啊,我按下这个数字,他会做加二加一,好翻转,那你会看到这个数字还在啊,还在, 那不仅这个翻转还在了,我们可以比如说换一个系统语言, 调一个系统语言,那调一个系统语言呢,也会将我们的这个 activity 呢给他 destroy 掉,并且呢重新创建,那我们发现即是指重情况下,我们这个东西呢还在 啊,现在语言已经切换过来了,我们看看界面都已经切换过来了,那我们看一下这个 real model, 这这个就是刚刚我们写的这个应用, 我们进去这个数还在十六,那么这个呢,就是我们使用这个 viewmodel 来管理这个数据的一个好处,我们不需要对它进行存储, 也不需要在这个地方用这个对象去取回,并且呢我们看到这个地方呢没有出现一个数据的变量,因为我们以前的写法在这个地方肯定要放一个 inter 类型的数,用来存放这个数吗? 那么这样呢模块化呢就不好了,我们这个这个 activity, 我们呢不用来管理数据,我们数据呢全部放在这个 view model 里面啊,这样呢我们的程序呢将会变得非常 模块化,当我们的界面如果很复杂的时候啊,你更加会发现这种好处,我们现在这里只有一个数据,一个变量,你可能还不一定 发现这个好处。那么这一节呢,我们就讲到这个地方了,那么在下一集中呢,我们会用一个稍微复杂一点的例子来将我们前面做过的内容呢,给他做一个综合的一个应用。今天先讲到这里。