Service服务

Service是Android的四大组件之一,用于长时间驻留在后台进行操作;


他区别于线程,虽然在App中进行创建和绑定的,但是最终是在主线程里运行的。

所以,一些耗时操作,如网络请求,用户输入,音视频播放等,最好是在Service的子线程中进行处理。

服务能被其他应用程序的组件启动,既是用户切换到另外的应用是还能保持后台运行,此外程序组件还能

与服务绑定,并与服务进行交互,甚至能进行进程间通信,所有这些都是后台进行的。


服务有两种基本类型:

Started和Bound

Started是应用程序组件调用startService()来启动服务,一旦启动,服务就能在后台一致运行下去,

既是启动它的组件已经被销毁了。通常,started的服务执行单一的操作并且不会像调用者返回结果。

Bound是通过一个应用程序组件调用BindService()绑定到服务上,则该服务就被bound可,bound服务提供了一个客户端/服务器接口,允许组件与服务进行交互,发送请求,获取结果,甚至可以利用进程间通信跨进程之赐你个操作。

多组件可以同事与一个服务绑定,不过所有的组件解除绑定后,服务也就被销毁。

 服务的生命周期图

11111

11111

 Service生命周期
Service有两种启动方式,一种是startService();一种是BindService();
第一种生命周期为:onCreate()-》onStart()——》ServiceRunning--》(如果调用context。stopService())
onDestory()---》ServiceShutdown
如果在程序运行期间,又调用StartService(),那么这个时候就不走onCreate()方法,而是直接走onStart()方法
第二种生命周期:onCreate()——》onBind()——》ServiceRunning——》onUnbind()——》onDistory——》ServiceStop
和上面一样,如果运行期间调用了BindService(),那么这个时候会走onBind方法,而不走onCreate();
区别:onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态和其他操作,
这个时候调用者和Service是绑定在一起的,Context退出了,Service就会调用onUnbind()——》ondestory进行退出
也就是说BindService会吧Service和Activity进行绑定,一旦Activity销毁,那么队形的服务也就销毁了,
按HOME不会消失。


代码实现

首先新建一个类Myservice继承Service

public class MyService extends Service {
    final static String ACTION="com.baozilichao.android";
    private SimpleBind binder;

重写方法

onCreate创建服务

onStartConnand启动服务

onDestory销毁服务

onBind绑定服务

onUnbind解除绑定

先在AndroidManifest中注册服务

<service android:name=".MyService">
    <!--这个是进行服务启动的时候的过滤的,启动指定的服务-->
    <intent-filter>
        <action android:name="com.baozilichao.android"/>
    </intent-filter>
</service>
启动服务时,调用方法启动服务

startService(new Intent(MyService.ACTION));

停止服务

stopService(new Intent(MySrevice.ACTION));

绑定服务

首先:Intent intent=new Intent(MyService.ACTION);

声明创建关联的方法;

ServiceConntion sc=new ServiceConntion(){

public void onServiceConnected(ComponentName componentName,IBinder iBinder){

MyService.SimpleBind binder=(MyService.Simple)iBinder;}

在Myservice中自定义方法,这里模拟从服务中获取数据

class SimpleBind extends Binder {
        public String getString(){
            return "已获得来自服务的一个数据";      }
在IBinder返回数据

调用方法绑定服务

BindService(intent,sc,BIND_AUTO_CREATE);

完成后绑定成功



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值