Android的Service组件详解

本文详细介绍了Android的Service组件,包括Service的性质、启动方式、生命周期以及如何使用startService和bindService。startService用于后台长时间运行任务,不支持直接交互;bindService则允许与启动者通讯和数据交换,需在不再使用时手动解绑以释放资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

Android的四大组件
1.Activity(活动)
2.Servise(服务)
3.content provider(内容提供者)
4.broadcastReceiver(广播接收者)

这次主要说的是Service:
在Android的系统中,通常只允许一个应用呈现用户界面并处于活动状态,其他的应用则处于非活动状态.而有时有需要某些应用即使没有界面,也可以在后台长期运行,比如音乐的播放,需要使用Service组件实现此功能.

Service

1.Service是一个没有用户界面,且在后台运行的应用组件.
2.其他的应用组件能够启动Service.
3.即使用户切换到了其他的应用程序,Service仍能继续在后台运行.
4.一个组件能够绑定到一个Service并与之交互.
5.服务是不能自己启动的
6.切记,Android的四大组件的使用都必须在清单文件中进行注册
7.写的服务类需要继承于Service
8.Service是运行在后台具有生命周期的组件.

开启Service的两大方式

1.开启Service的两大方式:
startService和bindService都能够开启Service,两者的区别是
startService开启的服务,不能与启动服务者进行通讯和数据交互
bindService开启的服务可以与服务启动者通讯和数据交互

Service的生命周期

startService开启的服务的生命周期:
1)oncreate()
2)onStartCommant()
3)onDestroy()
bindService开启服务的生命周期:
1)oncreate()
2)onBind()
3)onUnbind()
4)onDestroy()

用startService开启的Service的使用步骤

自己创建的类MyStartService继承于Service

1.在MainActivity类中开启服务

	Intent intent=new Intent(this,MyStartService.class);
    startService(intent);

2.停止服务
startService开启的服务会一直在后台运行,为了节省资源,在不使用的时候一定要将其停止.

	Intent  intent=new Intent(this,MyStartService.class);
  	stopService(intent);

重要的就是这两个方法,其余的操作就是在服务中想做什么自己写就OK了.

用bindService开启的Service的使用步骤

1.通过bindService开启的服务是可以和服务开启者进行通讯,用的比较多.
2.通过bindService启动的服务处于"绑定"的状态
3.一个绑定的Service提供一个允许组件与Service交互的接口,可以发送请求,获取返回结果,还可以实现进程间通信交互.
4.绑定的Service,只有当应用组件绑定后才能运行,多个组件可以绑定同一个Service,当所有与之绑定的组件都调用unbind()方法之后,这个Service就会自动被销毁了.

自己创建的类MyBindService继承于Service
1.为了使Service支持绑定,必须在MyBindService中重载方法onbind()

MainActivity类
绑定服务:

       Intent intent=new Intent(this,MyBindService.class);
       ServiceConnection serviceConnection=new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
            //这个方法就是和服务进行数据交互的接口,服务类传过来的数据都在IBinder service参数身上
            }
            @Override
            public void onServiceDisconnected(ComponentName name) {}
        };
        bindService(intent,serviceConnection,BIND_AUTO_CREATE);
    }

解绑服务:

    private void unBind() {
    	//这儿的serviceConnection就是上面创建的ServiceConnection类的对象
        unbindService(serviceConnection);
    }

MyBindService 类继承于Service

    @Override
    public IBinder onBind(Intent intent) {
        return new MyBind();
    }
    public class MyBind extends Binder {
        public MyBindService getService(){
            return MyBindService.this;
        }
    }

onBind方法使必须重载的,它返回的数据类型是IBinder,所以我们需要创建一个IBinder类的对象作为返回值.
我们可以写一个内部类,继承于Binder类,Binder 类是IBinder的子类,写一个方法让其返回MyBindService 类的对象,这个对象是IBinder子类的对象,具有IBinder类的特征可以作为onBind的返回值.
那么MyBindService 类的对象就传到了MainActivity类中的onServiceConnected(ComponentName name, IBinder service)方法的service,我们得到MyBindService 类的对象就可以调用里面的成员,进行数据的交互.

以上仅供参考,如有错误,希望大家给予指正 😃

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值