总结
【Android 详细知识点思维脑图(技能树)】
我个人是做Android开发,已经有十来年了,目前在某创业公司任职CTO兼系统架构师。虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
最后,赠与大家一句话,共勉!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
private ServiceConnection serviceConnection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bind_service);
serviceConnection = new ServiceConnection() {
/**
* 当服务被成功绑定的时候执行的方法,得到中间人IBinder service。
*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
binder = (MyBindService.MyBinder) service;
binder.callMethod();
}
/**
* 当服务失去绑定的时候调用的方法。当服务突然异常终止的时候
*/
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
bindService(new Intent(this, MyBindService.class), serviceConnection, BIND_AUTO_CREATE);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 一定要在activity销毁时,把这个activity绑定的service解绑,否则会leaked---漏气
unbindService(serviceConnection);
}
}
### Service
public class MyBindService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
Log.e("qwe", "onBind");
// 返回的这个IBinder就是activity和service之间的通讯的中间人
// 这里的IBinder将会在activity调用bindService绑定服务时所用的一个参数ServiceConnection的回调方法中获取
// 获取到了这个IBinder,就相当于activity打通了service的内部,可以调用service内部的所有方法
// IBinder是一个接口,不要实现这个接口(要重写的方法太多了),继承Binder(IBinder的一个实现类)即可
return new MyBinder();
}
@Override
public void onCreate() {
super.onCreate();
Log.e("qwe", "onCreate");
}
private void method() {
Toast.makeText(this, "我是写在Service内部的方法", Toast.LENGTH_SHORT).show();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 在绑定服务开启服务时,不会走onStartCommand这个生命周期方法
Log.e("qwe", "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.e("qwe", "onDestroy");
super.onDestroy();
}
public class MyBinder extends Binder {
/**
* 中间人帮助我们调用服务的方法。
* 中间人这里可以做很多事情
*/
public void callMethod() {
method();
}
}
}
### 绑定服务总结
> 最核心的思路:
>
> * activity里拿到service里的Ibinder
> * 通过Ibinder去和service通讯
>
> 最核心的方法是:
>
> * activity里的binderService方法(参数ServiceConnection的回调方法的参数IBinder service)
>
> * service里的onBinde方法(返回值Ibinder)
>
* 1. 使用bindService的方式开启服务。
2.
bindService(intent, new MyConn(), Context.BIND\_AUTO\_CREATE);
3. 实现一个MyConn 服务与activity的通讯频道(中间人的联系渠道)
private class MyConn implements ServiceConnection{
/\*\*
\* 当服务被成功绑定的时候执行的方法,得到中间人。
\*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
binder = (MyBinder) service;
}
/\*\*
\* 当服务失去绑定的时候调用的方法。当服务突然异常终止的时候
\*/
@Override
public void onServiceDisconnected(ComponentName name) {
```
}
```
}
4. 服务成功绑定的时候 会执行onBinde方法,返回中间人
public class MyBinder extends Binder{
/\*\*
\* 内部人员帮助我们调用服务的方法。
\*/
public void callMethodInService(){
methodInService();
}
}
5. 在调用者 activity代码里面通过中间人调用服务的方法。
6. 解除绑定服务 unbindService(conn)。
### 绑定服务的生命周期
oncreate()–>onbind()—>onDestory(); 不会调用onstart()方法 和 onstartCommand()方法。
### 开启服务的第二种方式更标准的写法—抽取接口隐藏私有方法
针对上例:
1. MyBinder为了让activity中可以调用,使用了public修饰符,但是这样带来一个坏处,因为MyBinder是Service的一个内部类,如果把他暴露给外界,外界就会通过MyBinder轻松地调用Service内部的所有方法,万一有些方法是隐秘的呢
2. 那么问题来了,又想让activity使用MyBinder的某个方法,又不想让activity直接拿到MyBinder的引用,该怎么办呢
3. ok,抽取接口IService,定义好准备要被外界调用的方法,在activity里强制转换Ibinder service为该接口IService,即可
代码:
IService
【延伸Android必备知识点】
【Android部分高级架构视频学习资源】
**Android精讲视频学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!
**任何市场都是优胜略汰适者生存,只要你技术过硬,到哪里都不存在饱和不饱和的问题,所以重要的还是提升自己。懂得多是自己的加分项 而不是必须项。门槛高了只能证明这个市场在不断成熟化!**另外一千个读者就有一千个哈姆雷特,所以以上只是自己的关键,不喜勿喷!
如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。欢迎关注会持续更新和分享的。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
所以重要的还是提升自己。懂得多是自己的加分项 而不是必须项。门槛高了只能证明这个市场在不断成熟化!**另外一千个读者就有一千个哈姆雷特,所以以上只是自己的关键,不喜勿喷!
如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。欢迎关注会持续更新和分享的。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!