文末
初级工程师拿到需求会直接开始做,然后做着做着发现有问题了,要么技术实现不了,要么逻辑有问题。
而高级工程师拿到需求会考虑很多,技术的可行性?对现有业务有没有帮助?对现有技术架构的影响?扩展性如何?等等…之后才会再进行设计编码阶段。
而现在随着跨平台开发,混合式开发,前端开发之类的热门,Android开发者需要学习和掌握的技术也在不断的增加。
通过和一些行业里的朋友交流讨论,以及参考现在大厂面试的要求。我们花了差不多一个月时间整理出了这份Android高级工程师需要掌握的所有知识体系。你可以看下掌握了多少。
混合式开发,微信小程序。都是得学会并且熟练的
这些是Android相关技术的内核,还有Java进阶
高级进阶必备的一些技术。像移动开发架构项目实战等
Android前沿技术;包括了组件化,热升级和热修复,以及各种架构跟框架的详细技术体系
以上即是我们整理的Android高级工程师需要掌握的技术体系了。可能很多朋友觉得很多技术自己都会了,只是一些新的技术不清楚而已。应该没什么太大的问题。
而这恰恰是问题所在!为什么别人高级工程师能年限突破30万,而你只有十几万呢?
就因为你只需补充你自己认为需要的,但并不知道企业需要的。这个就特别容易造成差距。因为你的技术体系并不系统,是零碎的,散乱的。那么你凭什么突破30万年薪呢?
我这些话比较直接,可能会戳到一些人的玻璃心,但是我知道肯定会对一些人起到点醒的效果的。而但凡只要有人因为我的这份高级系统大纲以及这些话找到了方向,并且付出行动去提升自我,为了成功变得更加努力。那么我做的这些就都有了意义。
喜欢的话请帮忙转发点赞一下能让更多有需要的人看到吧。谢谢!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
从使用上来说,还是比较简单的。实现LifecycleObserver接口:
// 官方democlass MyObserver : LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) fun connectListener() { // TODO } @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) fun disconnectListener() { // TODO }}
这俩个注解则标志着,当监听组件的onResume()方法被调用,这里我们被注解的方法也会被调用。(当然前提是addObserver了)
有了观察者了,那我们就去找被观察者。很明显,我们想要观察的对象是拥有生命周期的家伙,比如我们常用的Activity/Fragment。此时我们只需要在onResume()之前的某个实际,把这个Observer,add进去即可,比如在onCreate()中:
override fun onCreate(savedInstanceState: Bundle?) { lifecycle.addObserver(MyObserver())}
这样之后我们的MyObserver既可以正常在响应对应生命周期注解下的方法了。
不过,我们常规的Activitiy/Fragment根本就调不到lifecycle…
2.2、androidx
这里解释一下,上文中lifecyle其实就是调用Activity/Fragment中的这个方法:
@Overridepublic Lifecycle getLifecycle() { return mLifecycleRegistry;}
有朋友应该提着刀过来了,不是没有是import不一样。我使用的这个Fragment的package是这样的:androidx.fragment.app;
。androidx,这是为了完美支持JatPack所重新规划出来的包。
当然,也不一定非要用androidx。
Fragments and Activities in Support Library 26.1.0 and later already implement the LifecycleOwner interface.
所以,升库就ok了。这时有小伙伴可能会说了:我不想升库怎么办。这个问题问得好,不想升库,不想升库…就不升呗。
当然我相信,一定有小伙伴注意到一个问题,那就是getLifecycle()
是一个接口,那么也就是说我们可以自己实现?没错是这样…(这tm不废话么)
这就是我们自定义的关键。
2.3、LifecycleOwner
假设我们的Activity不支持getLifecycle()咋整?这里直接上官方的代码:
class MyActivity : Activity(), LifecycleOwner { private lateinit var mLifecycleRegistry: LifecycleRegistry override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) mLifecycleRegistry = LifecycleRegistry(this) mLifecycleRegistry.markState(Lifecycle.State.CREATED) mLifecycleRegistry.addObserver(MyObserver()) } public override fun onStart() { super.onStart() mLifecycleRegistry.markState(Lifecycle.State.STARTED) } override fun getLifecycle(): Lifecycle { return mLifecycleRegistry }}
就这样,结束了。说实话,到这就这的没有什么好讲的了。
通过代码,我们可以看出来,LifecycleRegistry
是我们的被观察者,它被初始化在拥有生命周期的Activity中,而我们的Observer
也被add()到其中,此外还有诸如markState(Lifecycle.State.CREATED)
的方法调用。
因此,到这无需多言,各位小伙伴恐怕已经明白了Lifecycle是如何帮我们管理生命周期的了。
2.4、小总结
这几段代码下来,我相信有的朋友已经差不多了解Lifecycle的思路了。一个很标准的观察者模式:这里的LifecycleRegistry(系统帮我们实现的Lifecycle的实现类),持有想要监听这个LifecycleOwner的Observer。然后通过markState(),去遍历所有Observer,通知其生命周期发生变化。
3、原理
聊完了一般的使用方法,我们一起来看一下原理。不得不说,Lifecycle实现的原理还是比较有意思的。
咱们在上述的MyObserver
中加了注解,所以先看看注解为我们带来了什么。通过注解生成器,我们可以看到在build中得到了下边这个class:
public class MyObserver_LifecycleAdapter implements GenericLifecycleObserver { final MyObserver mReceiver; LifecycleObserverDemo_LifecycleAdapter(MyObserver receiver) { this.mReceiver = receiver; } @Override public void onStateChanged(LifecycleOwner owner, Lifecycle.Event event) { mReceiver.onAny(owner,event); if (event == Lifecycle.Event.ON_RESUME) { mReceiver.connectListener(); } if (event == Lifecycle.Event.ON_PAUSE) { mReceiver.disconnectListener(); } } public Object getReceiver() { return mReceiver; }}
很清晰,我们能够看到,在onStateChanged(LifecycleOwner owner, Lifecycle.Event event)
中通过对应的Event就可以调用到我们MyObserver
中注解的方法。
那么问题来了:onStateChanged被谁调用的呢?通过上边的例子,我们知道想要Observer能够感应生命周期要么使用内置好的Lifecycle(getLifecycle()
),要么自己去实现(LifecycleOwner
)。接下来我们就分这俩种情况来看一看具体的实现原理。
3.1、自定义LifecycleOwner
这一步的源码还是比较的简单直接的,我们可以直接在LifecycleRegistry
中的markState(Lifecycle.State.STARTED)
一探究竟,一层层的调用下来,我们抛弃一些逻辑判断之后,可以看到一些关键的内容:
static class ObserverWithState { State mState; GenericLifecycleObserver mLifecycleObserver; ObserverWithState(LifecycleObserver observer, State initialState) { mLifecycleObserver = Lifecycling.getCallback(observer); mState = initialState; } void dispatchEvent(LifecycleOwner owner, Event event) { State newState = getStateAfter(event); mState = min(mState, newState); // 看到这,没啥好说的了吧? mLifecycleObserver.onStateChanged(owner, event); mState = newState; }}
可以看到,这部分会很直白的调用到注解生成class中的onStateChanged()
,完成生命周期的感知。
3.2、getLifecycle()
getLifecycle()
的方式,同样是返回了一个LifecycleRegistry
。因此,最开始我认为系统因此在对应的生命周期完成对上3.1一样的调用。不过看把发现自己还是太年轻。
在SupportActivity
中,的onCreate方法中,我们可以看到这样的调用:
protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ReportFragment.injectIfNeededIn(this);}
最后
今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【算法合集】
【延伸Android必备知识点】
【Android部分高级架构视频学习资源】
**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!