ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

service生命周期及各种回调实测

2022-08-12 01:01:12  阅读:236  来源: 互联网

标签:生命周期 Service service 启动 调用 实测 activity startService


1. 也就是说,他有两种启动方式
startService:onCreate()- >onStartCommand()->startService()->onDestroy()
BindService:onCreate()->onBind()->onUnbind()->onDestroy()

startService的启动方式:
这种启动方式和启动activity很相像:
Intent intent = new Intent(this, MyService.class);
startService(intent);
在使用这种方式启动服务之后,此服务就会一直在后台运行,不受启动它的activity的生命周期的影响,除非我们在 service 的任何一个位置调用它的 stopService()方法;或者程序被杀死/结束,此service才会被停止

BindService的启动方式:
Intent bindIntent = new Intent(this, MyService.class);//Myservice是子定义的service,继承了service类
bindService(bindIntent, connection, BIND_AUTO_CREATE);//第一个参数就是intent,第二个参数是ServiceConnection,第三个参数是一个标志位,这里传入 BIND_AUTO_CREATE 表示在活动和服务进行绑定后自动创建服务。
它区别于startService的启动,他的生命周期是和启动它的acitvity(活动)是紧密相关的,也就是说,如果你在A活动里用bindService的方式启动了一个Serivce,那么如果这个activity被销毁,则此service也就会被终止。那如果我们想自己解除活动和服务之间的绑定该怎么办呢?调用一下 unbindService()方法就会调用onUnbind()和onDestroy()了。

  • 如果同时用着两种方式启动,那该怎么销毁呢,是用stopService,还是用unbindService?
    根据Android的系统机制,如果你同时用着两种方式启动、绑定了一个service,那么他就会一直处于运行状态,所以必须要以上两种状态同时不满足,也就是要同时调用stopService和unbindService,onDestroy()方法才能执行

3. 当一个Service被创建以后,再次调用startService方法,Service是不会被重新创建的,而是会重新执行onStartCommand方法。

BindService一旦被某个activity调用,onbind、 onServiceConnected和doTask就会被调用,且在被此activity绑定的状态下此activity再次调用BindService不会产生变化。(当所有绑定此service的activity都解绑了,调用onDestroy()才会成功,否则会报错)

onStartCommand属于Service类,doTask属于Service的内部Binder类,onServiceConnected属于activity的内部ServiceConnection类

由此可见onStartCommand是Service自己的服务内容,doTask是属于和activity有联系的Service服务内容,ServiceConnection是activity在绑定成功时自己的动作内容。

标签:生命周期,Service,service,启动,调用,实测,activity,startService
来源: https://www.cnblogs.com/1118zjg/p/16009914.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有