• Android四大核心组件之Service


    实验内容

    • 启动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,如下

    图1
    3、打开AndroidManifest我们可以看到系统自动添加了一个Service的声明

    图2
    4、在activity_main.xml布局里面添加两个按钮,如下

    图3
    5、在MainActivity分别为其添加相应的监听函数

    图4
    6、在EchoService中添加打印信息提示Service是否开启

    图5
    7、编译运行如下

    图6
    8、我们点击启动服务按钮,并查看Logcat,可以看到

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

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

    • Service绑定
      1、首先在activity_main.xml再添加两个按钮

    图9
    2、然后在MainActivity分别添加相应代码

    图10

    图11
    3、在EchoService中添加相应的输出

    图12
    4、编译运行如下

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

    图14
    但是发现并没有打印我们在代码中写的输出信息

    图15
    因为下面代码的返回值是null

    图16
    5、下面通过一个内部类来实现,在EchoServ添加相应代码

    图17
    6、再次编译运行如下

    图18
    点击绑定服务按钮,查看Logcat如下

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

    • 与Service通信
      1、在Service内部生成一个操作,让它始终执行

    图20

    图21
    2、添加一个按钮

    图22
    3、在MainActivity中添加相应代码

    图23

    图24
    4、编译运行,可见如下效果

    图25
    点击绑定Service之后

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

    图27

  • 相关阅读:
    Determine what is blocking UI thread
    Nginx学习总结
    redisshake
    Kafka——在zookeeper中存储结构和查看方式 规格严格
    linux df h 命令卡住 解决方法 规格严格
    使用Docker部署MySQL 规格严格
    解决Authentication plugin ‘caching_sha2_password‘ cannot be loaded问题 规格严格
    PostgreSQL视图和物化视图 规格严格
    nginx: [emerg] "server" directive is not allowed here in /usr/local/nginx/conf/nginx.conf:45 规格严格
    mysql java.security.cert.CertificateNotYetValidException: NotBefore: 规格严格
  • 原文地址:https://www.cnblogs.com/liming1593/p/5427949.html
Copyright © 2020-2023  润新知