首页 理论教育 服务的实现:需要覆盖的方法及生命周期

服务的实现:需要覆盖的方法及生命周期

时间:2023-06-27 理论教育 版权反馈
【摘要】:在上一节我们看到,创建服务时自动创建了onBind方法,那么还有其他什么方法需要实现呢?图4-8 选择方法种类弹出的窗口如图4-9所示,显示了需要覆盖的方法。图4-9 选择方法图4-10 Service的生命周期从图中可以看出,实现Service的类应该实现以下方法。如果使用onBind()方法,还需实现onUnbind()方法。要注意的是,onBind()和onUnbind()方法应成对出现。startService的启动顺序OnCreate()->onStartCommand()->onDestroybindtService的启动顺序OnCreate()->onBind()->onServiceconnection->onUnbind()->onDestroy()两者混合使用可以先startService后bindtService。

服务的实现:需要覆盖的方法及生命周期

在上一节我们看到,创建服务时自动创建了onBind(Intent intent)方法,那么还有其他什么方法需要实现呢?

在Android Studio中,在MyService的代码区单击鼠标右键,选择菜单中Generate命令,如图4-7所示。

978-7-111-58810-8-Chapter04-33.jpg

图4-7 MyService生成函数菜单命令

弹出的菜单窗口如图4-8所示,选择Override Methods选项。

978-7-111-58810-8-Chapter04-34.jpg

图4-8 选择方法种类

弹出的窗口如图4-9所示,显示了需要覆盖的方法。在这些方法中我们要选择哪些方法呢?先看Service的生命周期,如图4-10所示。

978-7-111-58810-8-Chapter04-35.jpg

图4-9 选择方法

978-7-111-58810-8-Chapter04-36.jpg

图4-10 Service的生命周期

从图中可以看出,实现Service的类应该实现以下方法。

(1)onCreate()方法,当第一次启动Service时,先调用这个方法。

(2)onStartComman()方法或者onBind()方法。

(3)如果使用onBind()方法,还需实现onUnbind()方法。要注意的是,onBind()和onUnbind()方法应成对出现。(www.xing528.com)

(4)onDestroy()方法,当停止Service时,应执行onDestroy()方法。

启动Service有如下两种方式。

(1)startService():该方法启动Service,访问者和Service之间没有关联,一旦启动,即使访问者退出,Service依然运行。使用这种方法的启动顺序为onCreate()->onStartCom-mand()->onDestory(),如果服务已经开启,不会重复执行onCreate(),而是会调用on-StartCommand(),服务停止的时候调用onDestory(),服务只会被停止一次。

(2)bindService():该方法启动Service,访问者和Service绑定在一起,一旦访问者退出,Service随即退出。使用这种方式启动的Service的生命周期为onCreate()--->onBind()--->onunbind()--->onDestory()。

Service和Actvity都是从Context里面派生出来的,因此都可以直接调用getResource()、getContentResolver()等方法。

Service的方法调用总结如下。

(1)startService的启动顺序

OnCreate()->onStartCommand()->onDestroy

(2)bindtService的启动顺序

OnCreate()->onBind()->onServiceconnection->onUnbind()->onDestroy()

(3)两者混合使用

可以先startService后bindtService。

OnCreate()->onStartCommand()->onBind()->onServiceconnection->onUnbind()->onDestroy()

也可以先bindtService后startService。

OnCreate()->onBind()->onServiceconnection->onStartCommand()->onUnbind()->onDestroy()

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈