2024年最全Service之基础(开启服务、绑定本地服务)(2),2024年最新阿里三面容易过吗

总结

【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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值