热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Service基本入门及AIDL跨进程通讯

前言:在学习Service过程中,看其他人的博客,讲的不怎么全,需要查看多人的博客才能弄明白。这篇文章是我个人总结。不正之处,还望大牛指正。写的比较浅,适合入门操作。一、Service

前言:在学习Service过程中,看其他人的博客,讲的不怎么全,需要查看多人的博客才能弄明白。这篇文章是我个人总结。不正之处,还望大牛指正。写的比较浅,适合入门操作。

一、Service是什么?

1、Service是android四大组件之一,没有前台界面,在后台运行。
2、Service运行在主线程,如果在Service中做很耗时操作,将会是程序ANR。
3、Service在后台处理一些耗时的操作(不能很耗时),或者执行一些长期运行的任务

二、Service的基本用法

1、继承Service类,重写Service的四个方法

onCreate()、onStartCommend()、onBind()、onDestory()

2、Service的启动方式

有两种启动方式 1、startService()和 bindService()

首先第一种:startService

经历的生命周期是onCreate() –> onStartCommand 服务开启,当用户调用stopService()方法时服务调用onDestory(),服务就被销毁。
注意:当一个服务已经被开启之后,用户再次调用startService时,生命周期就不会走onCreate(),只会调用onStartCommand方法。
所以在onCrate中做一些初始化操作,在onStartCommand做些业务类操作

第二种启动方式 bindService()

用户点击bindService之后,Service经历的生命周期为onCreate() –> onBind()那么Service就被启动了,用户调用unbindService(),Sevice调用 onUnbind()–> onDestory(),自此,服务就被销毁了
注意:如果用户同时调用了startService和bindService方法,那么,若是用户在销毁Service的时候只调用了stopService,那么service是不会调用onDestory()方法的,因为Service还有其他Activity的引用。也就是还和其他Activity绑定了,只有当调用unBindService时,Service才会调用onDestory();

三、Service跨进程通信(AIDL)

1、AIDL(Android Interface Definition Language)
android接口定义语言,解决跨进程通信,让多个应用程序共享一个Service。
2、Android studio上使用AIDL的方法
这里写图片描述
操作该方法之后会生成一个与java包同级的aidl包
这里写图片描述
之后会生成如下所示的路径
这里写图片描述
然后在文件中添加你需要的方法,然后build一下,生成如下的路径
这里写图片描述这里写图片描述
新建一个Service类,在AndroidManifest.xml中注册Service,由于另一个进程不知道服务中的Service是什么名称,所以用隐式调用注册方式如下:
这里写图片描述
Service代码中添加如下代码:
这里写图片描述
重写onBind()方法,并返回mBinder
3、再新建一个项目,命名为AIDLClient
说明:需要使用AIDL,就必须将ServiceTest(我建的服务类项目命名为ServiceTest)项目中的AIDL文件这里写图片描述
复制到AIDLCilent中,包括包名路径:
具体操作和在ServiceTest中新建AIDL方式一样,首先新建aidl包,然后再在改包下新建与ServiceTest一样的包名这里写图片描述,然后再将ServiceTest中的这里写图片描述
文件复制到AIDLClient中,build一下,aidl文件复制完成。
再在AIDLCilent的activity_main.xml文件中添加一个按钮,在MainActivity中添加如下代码:
这里写图片描述
注意:

Intent intent = new Intent("com.example.servicetest.IMyAidlInterface");
intent.setPackage("com.example.hhly_pc.servicetest");
bindService(intent, connection, BIND_AUTO_CREATE);

这三行代码中,若你没有加中间那行代码 intent.setPackage(“com.example.hhly_pc.servicetest”),若你适配的手机版本为android 5.0之前的,那么Service的隐式调用可以成功,若为5.0之后也就是从Lollipop开始,采用隐式调用,便会编译出错Service Intent must be explitict xxxx……解决办法是设置Service的包名即可。

参考文章:http://blog.csdn.net/guolin_blog/article/details/9797169,这篇文章是郭神讲解Service的,但是他用的是eclipse,有些方法也不适用于android Studio。
http://blog.csdn.net/zheng548/article/details/54605824 这篇文章写的是android studio创建AIDL的,但是还有些地方没讲明白。
http://www.2cto.com/kf/201604/502210.html 这篇文章和https://my.oschina.net/u/269663/blog/396826?fromerr=sm6neVzq这两篇文章讲的事解决android5.0之后Service无法隐式调用的办法。


推荐阅读
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 本文探讨了在使用JavaMail发送电子邮件时,抄送功能未能正常工作的问题,并提供了详细的代码示例和解决方法。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 本文介绍了一个使用Spring框架和Quartz调度器实现每周定时调用Web服务获取数据的小项目。通过详细配置Spring XML文件,展示了如何设置定时任务以及解决可能遇到的自动注入问题。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文详细介绍了Android系统的四层架构,包括应用程序层、应用框架层、库与Android运行时层以及Linux内核层,并提供了如何关闭Android系统的步骤。 ... [详细]
  • JUC并发编程——线程的基本方法使用
    目录一、线程名称设置和获取二、线程的sleep()三、线程的interrupt四、join()五、yield()六、wait(),notify(),notifyAll( ... [详细]
  • 在Java开发中,如何利用ProcessBuilder类调用外部程序是一个常见的需求。本文将详细介绍ProcessBuilder类的使用方法,并提供示例代码帮助你更好地理解和应用。 ... [详细]
  • 深入理解Java多线程与并发机制
    本文探讨了Java多线程和并发机制的核心概念,包括多线程类的分类、执行器框架、并发容器及控制工具。通过详细解析这些组件,帮助开发者更好地理解和应用多线程技术。 ... [详细]
author-avatar
李波2602884584
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有