Service

Q:谈一谈Service的生命周期?
onCreate()创建服务、 onStartCommand()第一次启动服务、onBind()绑定服务、onUnBind()取消服务绑定、onDestory()停止服务

Q:Service的两种启动方式?区别在哪?
startService启动服务后调用服务的onStartCommand方法,如果服务还没创建的话先调用onCreate()创建服务;
bindService绑定服务后会调用服务的onBind方法,如果没有服务则onCreate()——onBind(),然后activity可以通过新建一个ServiceConnection对象并重写其ServiceConnected方法接收服务的onbind()方法回传的Ibinder对象实例。这样可以实现客户端与服务端的通信,知道调用 unbindService()停止服务为止。

Q:一个Activty先start一个Service后,再bind时会回调什么方法?此时如何做才能回调Service的destory()方法?
会回调onBind()绑定服务的方法,如果想要回调Service的destory()方法,需要同时调用stopService()方法和unBindService()方法

Q:Service如何和Activity进行通信?
1、通过bindService(),并通过onbind()获取相应的Ibinder对象实例。
2、通过广播,service发送广播,在activit一种进行接收广播数据。

Q:用过哪些系统Service?
ActivityManagerService: 系统管理服务
WindowManager: 窗口管理服务
LayoutInflater: 获取xml里面定义的view
AlarmManager:时钟服务
PowerManager: 电源服务
KeyboadManager: 键盘管理服务

Q:是否能在Service进行耗时操作?如果非要可以怎么做?
Service 服务是运行在主线程中的,因此不能执行耗时操作;如果非要执行耗时操作,可以在服务中新开线程,如果IntentService就是专门处理耗时的服务的,里面通过一个队列来管理每条任务,每条任务都在自己的子线程中执行,使用IntentService时,只需要继承IntentService,重写onHandleIntent()就行了

Q:AlarmManager能实现定时的原理?
通过调用AlarmManager的set()方法就可以设置定时任务,里面又几个参数,PendingIntent 比较重要,这个就是我们需要广播的内容封装。然后通过广播接收器onRecive()接收,这样不断的启动服务和广播接收实现定时操作

Q:前台服务是什么?和普通服务的不同?如何去开启一个前台服务?
前台服务是用户看得见的服务,而普通服务一半默默的在后台运行,比如通知栏的通知Notification就是一个前台服务,通过startForeground() 开启一个前台服务

Q:是否了解ActivityManagerService,谈谈它发挥什么作用?
ActivityManagerService是一个核心系统服务,负责四大组件的、启动、调度、切换以及进程间管理和调度工作。

Q:如何保证Service不被杀死?
1、提升service优先级
2、在activity的onDestory()方法中发送广播启动服务
3、在onStartCommand()方法中设置flags值为 START_STICKY,让服务结束后自动重启

你可能感兴趣的:(Service)