热门标签 | 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无法隐式调用的办法。


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
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社区 版权所有