您的位置:首页 > 职场人生

Android面试(Service部分)

2017-08-23 20:10 288 查看
Service是什么?

Service作为Android四大组件之一,Service是可以在后台执行长时间任务而没有用户界面的应用组件。

 

Service和Thread的区别

Thread是程序运行的最小单元——线程。

Service是安卓的一种机制,运行在主线程,因此在Service中进行耗时操作也需要开启新的线程。

那为什么还要Service不在Activity中直接操作Thread呢?

因为activity很难对Thread进行管理,当activity销毁了,之后的activity就没办法获取到之前创建的Thread。

 

StartService步骤

1、定义一个类继承于Service

2、在Manifest.xml文件中配置该Service

3、使用Context的startService(Intent)方法启动该Service

4、不再使用时使用stopService(Intent)方法停止该服务

 

BindService步骤

1、定义一个类继承Service,创建一个继承与Binder的实例对象,并提供公共方法供客户端调用。

2、实现onBind()方法,返回Binder实例

3、在Manifest.xml文件中配置该Service

4、在客户端中,实现ServiceConnection实例,从onServiceConnected()回调方法接收Binder,并使用bindService绑定服务。注:onServiceDiscounnection方法是在服务崩溃或者服务杀死导致的连接中断时调用

 
Service的生命周期



startService和bindService回调的生命周期是不一样的。

在startService中:

首先会回调onCreate,再调用onStartCommand,最后在setopSelf或者Activity中调用stopService(Intent)方法时,会调用onDestroy方法。

onCreate:首次创建服务时,系统会调用此方法来执行一次性设置程序,该方法在onBind和onStartCommand方法之前,如果服务已经在运行则不会再调用词方法,总的来说,该方法只会在Service创建时,调用一次。

onStartCommand:每次通过startService(Intent)方法启动Service时都会调用。其中我们可以注意onStartCommand是有返回值的,其中返回值包括:START_STICKY、START_NOT_STICKY、START_REDELIVER_INTENT、START_STICKY_COMPATIBILITY。

START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。

START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。

START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。

START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。

OnDestroy:在Service销毁时调用,可在此回收一些资源。

 

在bindService中:

首先会调用onCreate,然后调用onBind方法,然后在Activity与Service解绑时调用Unbind方法,最后在所有Activity与Service解绑后,该Service会销毁,并调用onDestroy方法。

onBind:绑定服务才会调用,但注意即使我们用startService也要实现该方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: