Android四大核心组件之Service

时间:2025-02-02 18:33:56

实验内容

  • 启动Service
  • 绑定Service
  • 与Service进行通信

实验要求

  • 启动Service
  • 绑定Service
  • 与Service进行通信

实验步骤

  • Service概述
    Service通常总是称之为“后台服务”,其中“后台”一词是相对于前台而言的,具体是指其本身的运行并不依赖于用户可视的UI界面,因此,从实际业务需求上来理解,Service的适用场景应该具备以下条件:
    1、并不依赖于用户可视的UI界面(当然,这一条其实也不是绝对的,如前台Service就是与Notification界面结合使用的);
    2、具有较长时间的运行特性。
  • service启动
    1、新建一个项目命名为Service_Test
    2、在MainActivity.java下新建一个类,命名为EchoService.java,并继承Service,如下
    Android四大核心组件之Service

图1
3、打开AndroidManifest我们可以看到系统自动添加了一个Service的声明
Android四大核心组件之Service

图2
4、在activity_main.xml布局里面添加两个按钮,如下
Android四大核心组件之Service

图3
5、在MainActivity分别为其添加相应的监听函数
Android四大核心组件之Service

图4
6、在EchoService中添加打印信息提示Service是否开启
Android四大核心组件之Service

图5
7、编译运行如下
Android四大核心组件之Service

图6
8、我们点击启动服务按钮,并查看Logcat,可以看到
Android四大核心组件之Service

图7
可以看到EchoService已经运行,点我们点击返回键,销毁当前Activity时,可以看到并没有打印服务停止的信息,因此Service还处在后台运行状态。
9、当我们重新点击应用图标,再次打开时,点击停止服务按钮,可以看到Logcat的打印信息如下
Android四大核心组件之Service

图8
可以看到服务已经停止。

  • Service绑定
    1、首先在activity_main.xml再添加两个按钮
    Android四大核心组件之Service

图9
2、然后在MainActivity分别添加相应代码
Android四大核心组件之Service

图10
Android四大核心组件之Service

图11
3、在EchoService中添加相应的输出
Android四大核心组件之Service

图12
4、编译运行如下
Android四大核心组件之Service

图13
当我们点击绑定服务时,如果当前的Service没有在运行,则先启动然后绑定,查看Logcat如下
Android四大核心组件之Service

图14
但是发现并没有打印我们在代码中写的输出信息
Android四大核心组件之Service

图15
因为下面代码的返回值是null
Android四大核心组件之Service

图16
5、下面通过一个内部类来实现,在EchoServ添加相应代码
Android四大核心组件之Service

图17
6、再次编译运行如下
Android四大核心组件之Service

图18
点击绑定服务按钮,查看Logcat如下
Android四大核心组件之Service

图19
需要注意的是:当我们需要解除绑定时需要先解除绑定然后再停止服务。
当我们启动并绑定了Service后,销毁当前Activity时,Service也被停止。

  • 与Service通信
    1、在Service内部生成一个操作,让它始终执行
    Android四大核心组件之Service

图20
Android四大核心组件之Service

图21
2、添加一个按钮
Android四大核心组件之Service

图22
3、在MainActivity中添加相应代码
Android四大核心组件之Service

图23
Android四大核心组件之Service

图24
4、编译运行,可见如下效果
Android四大核心组件之Service

图25
点击绑定Service之后
Android四大核心组件之Service

图26
可以看到Service不停地打印信息,点击解除绑定后打印信息停止。再次点击绑定服务,然后点击获取当前i值按钮可以看到如下
Android四大核心组件之Service

图27