面试题三:组件之Service系列

Q1:谈一谈Service的生命周期?
Q2:Service的两种启动方式?区别在哪?
Q3:一个Activty先start一个Service后,再bind时会回调什么方法?此时如何做才能回调Service的destory()方法?
Q4:Service如何和Activity进行通信?
Q5:用过哪些系统Service?
Q6:是否能在Service进行耗时操作?如果非要可以怎么做?
Q7:AlarmManager能实现定时的原理?
Q8:前台服务是什么?和普通服务的不同?如何去开启一个前台服务?
Q9:是否了解ActivityManagerService,谈谈它发挥什么作用?
Q10:如何保证Service不被杀死?

Q1:谈一谈Service的生命周期?

官方文档提供的Sevice生命周期图如下:

先来看这几种回调方法含义:
onCreate():服务第一次被创建时调用
onStartComand():服务启动时调用
onBind():服务被绑定时调用
onUnBind():服务被解绑时调用
onDestroy():服务停止时调用

Q2:Service的两种启动方式?区别在哪?

  • startService():开启Service,调用者退出后Service仍然存在。

  • bindService():开启Service,调用者退出后Service也随即退出。

Service生命周期:

  • 只是用startService()启动服务:onCreate() -> onStartCommand() -> onDestory

  • 只是用bindService()绑定服务:onCreate() -> onBind() -> onUnBind() -> onDestory

  • 同时使用startService()启动服务与bindService()绑定服务:onCreate() -> onStartCommnad() -> onBind() -> onUnBind() -> onDestory

Q3:一个Activty先start一个Service后,再bind时会回调什么方法?此时如何做才能回调Service的destory()方法?

一个Activty先start一个Service后,再bind时会调用 onBind()方法。

此时调用onUnBind()方法才能回调Service的destory()方法。注意:调用stopService()方法是不行的。

Q4:Service如何和Activity进行通信?

可以通过bindService的方式,先在Activity里实现一个ServiceConnection接口,并将该接口传递给bindService()方法,在ServiceConnection接口的onServiceConnected()方法里执行相关操作。

Q5:用过哪些系统Service?

参考文章:Android系统服务(SystemService)简介

 Q6:是否能在Service进行耗时操作?如果非要可以怎么做?

猜你喜欢

转载自blog.csdn.net/songzi1228/article/details/82656287