美文网首页
复习一下 startService 和 bindService区

复习一下 startService 和 bindService区

作者: 鹅鹅鹅曲项向天歌呀 | 来源:发表于2020-06-09 16:58 被阅读0次

首先来一个声明周期的图片:


声明周期图

这个图,emmm....挺好的.抄的.


嘿嘿嘿.jpg

startService的声明周期:

onCreate() --> onStartCommand() --> onDestory()
  当多次调用startService的时候,onCreate()不重复执行,但是onStartCommand()会执行。startService调用了之后,和调用者没有关系了,不会随着调用者的销毁而销毁,会一直存在,直到其调用了stopService。调用者访问不到Service里面的方法。

bindService的声明周期:

onCreate() --> onBind() --> onUnbind() --> onDestory()
  当多次调用bindService的时候,onCreate()不重复执行,但是onBind()会执行。onCreate()onBind()都只执行一次。它生命周期跟随其调用者,调用者释放的时候,必须对该Service解绑,当所有绑定全部取消后,系统即会销毁该服务。 bindService 的方式通过ServinceConnection的onServiceConnected方法,获取到Service对象,通过该对象可以直接操作到Service内部的方法,从而实现的Service 与调用者之间的交互。

敲黑板

ps : ServinceConnection有两个方法:
onServiceConnected() :系统调用这个来传送在service的onBind()中返回的IBinder.我们可以自动以IBinder,返回我们想要的数据.多次调用bindService的时候,这个方法会重复执行.
OnServiceDisconnected :Android系统在同service的连接意外丢失时调用这个.比如当service崩溃了或被强杀了.当客户端解除绑定时,这个方法不会被调用.

啦啦啦

使用场景

startService
后台服务长期进行某项任务
bindService
短暂的使用
startService+bindService
如果想启动一个后台服务长期进行任务,且这个过程中需要与调用者进行交互,那么可以两者同时使用
比如,在下载的过程中(startService,做耗时操作)监听进度到界面上显示(bindService,通过ServinceConnection传递到Activity).
对于既使用startService,又使用bindService的情况,结束服务时需要注意的事项:
Service的终止,需要unbindService和stopService都调用才行;

END

如有抄袭或侵权或问题,联系Q1032528317

相关文章

网友评论

      本文标题:复习一下 startService 和 bindService区

      本文链接:https://www.haomeiwen.com/subject/jjwstktx.html