安卓服务Service学习笔记

目录

一、服务的定义

二、服务的应用

三、服务的生命周期

四、服务的创建

五、服务的开启与停止

六、服务和组件通信


一、服务的定义

    服务:在后台运行的,没有界面的组件。


二、服务的应用

    应用:

  • 一些不需要界面的操作,如:音乐播放的一系列逻辑。
  • 需要界面时,可以设置前台服务。

三、服务的生命周期

startService 启动服务, stopService/stopSelf停止服务

  • onCreate 服务创建时执行
  • onStartCommand 开始服务时执行
  • onDestroy 停止服务时执行

bindService 绑定服务, unbindService 解绑服务

  • onCreate 绑定服务时执行
  • onBind 绑定服务时执行
  • onDestroy 解绑服务时执行

注意事项

  1. 如果服务创建了,之后再创建只会回调 onStartCommand。
  2. 第一次创建服务,会先调 onCreate 且只会执行一次。
  3. 如果开启服务和绑定服务的方法一起使用,必须停止和解绑一起使用才能销毁服务。

四、服务的创建

         代码中

public class MyService extends Service { // Service 的实现类
    @Nullable
    @Override
    public IBinder onBind(Intent intent) { // 返回 IBinder 对象,用来和调用服务的组件通信
        return null;
    }
}

        清单文件中

<service android:name=".MyService" // 指定服务的路径
         android:enabled="true" // 是否允许本程序以外的程序使用该服务
         android:exported="true"/> // 是否启用该服务

五、服务的开启与停止

        打开服务

Intent object = new Intent(MainActivity.this,MyService.class);//指定需要打开的服务类
startService(object);//打开服务

        关闭服务

  方法一

Intent object = new Intent(MainActivity.this,MyService.class);//指定需要关闭的服务类
stopService(object);//停止服务

        注意事项:服务只会创建一次,创建一个,之后都是打开。也就是 onCreate 只回调一次,之后如果再次打开都是回调 onStartCommand。

   方法二

stopSelf() //服务内部调用

        

        绑定服务

 /**
         *bindService 参数讲解
         * 第一个参数为指定需要解绑的服务意图
         * 第二个参数为ServiceConnection
         * 第三个参数为BIND_AUTO_CREATE,表示如果没有创建服务自动创建服务
         */
Intent object = new Intent(MainActivity.this,MyService.class);//指定需要绑定的服务类
bindService(object,myServiceConnection,BIND_AUTO_CREATE);//绑定服务

        解绑服务​​​​​​​

unbindService(myServiceConnection);//解绑服务

        ServiceConnection 的两种处理方式

         第一种 使用内部类的方式

        特点:只能创建一次不能重复创建

private ServiceConnection myServiceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) { //在服务执行 onBind 方法后回调

        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {
            //在服务与组件解绑后回调
        }
    };

        

        第二种 采取实现类的方式

        特点:可以多次重复创建​​​​​​

private MyServiceConnection myServiceConnection = new MyServiceConnection();

private class MyServiceConnection implements ServiceConnection{
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {

        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {

        }
    }

六、服务和组件通信

服务中

一、创建 Binder的实现类

public class MyBinder extends Binder{

    }

二、创建Binder对象

private MyBinder mBinder = new MyBinder();

三、返回Binder对象

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

四、接收Binder对象

@Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            MyService.MyBinder myBinder = (MyService.MyBinder) iBinder;//向下转型后才能使用实现类中的方法
        }

五、Binder类方法的写法

public class MyService extends Service {


    private MyBinder mBinder = new MyBinder();
    private MyService myService = new MyService();
    
    public class MyBinder extends Binder{
        //使用MyService中的方法
        public void invokeServiceMethod(){
            myServiceMethod();
        }
        
        //利用MyBinder中的方法
        public void invokeMyBinderMethod(){
            
        }
        //返回服务对象
        public MyService getMyService(){
            return myService;
        }
        
    }
    private void myServiceMethod(){
        
    }
    
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

}

六、Binder 对象的使用

    /**
     * 获取myBinder和myService对象,使用其中的方法
     */
 @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            MyService.MyBinder myBinder = (MyService.MyBinder) iBinder;
            myBinder.invokeServiceMethod();
            myBinder.invokeMyBinderMethod();
            MyService myService = myBinder.getMyService();
            myService.myServiceMethod();
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蒋的学习笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值