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


推荐阅读
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • Python 内存管理机制详解
    本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • Linux系统中Java程序Too Many Open Files问题的深入解析与解决方案
    本文详细分析了在Linux环境下运行的Java应用程序中可能出现的“Too many open files”异常现象,探讨其成因及解决方法。该问题通常出现在高并发文件访问或大量网络连接场景下,对系统性能和稳定性有较大影响。 ... [详细]
  • Appium + Java 自动化测试中处理页面空白区域点击问题
    在进行移动应用自动化测试时,有时会遇到某些页面没有返回按钮,只能通过点击空白区域返回的情况。本文将探讨如何在Appium + Java环境中有效解决此类问题,并提供详细的解决方案。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 本文介绍了在Java环境中使用PDFBox和XPDF工具从PDF文件中提取文本内容的方法。重点讨论了处理中文字符集及解决相关错误的技术细节,特别是针对某些特定格式的PDF文件(如网上填写的报名表和下载的论文)遇到的问题及解决方案。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 深入理解Vue.js:从入门到精通
    本文详细介绍了Vue.js的基础知识、安装方法、核心概念及实战案例,帮助开发者全面掌握这一流行的前端框架。 ... [详细]
  • 本文详细介绍如何使用 HTML5 和 JavaScript 实现一个交互式的画板功能。通过具体代码示例,帮助读者理解 Canvas API 的基本用法及其在绘图应用中的实际应用。 ... [详细]
  • 探讨如何修复Visual Studio Code中JavaScript的智能感知和自动完成功能在特定场景下无法正常工作的问题,包括配置检查、语言模式选择以及类型注释的使用。 ... [详细]
  • ZooKeeper集群脑裂问题及其解决方案
    本文深入探讨了ZooKeeper集群中可能出现的脑裂问题,分析其成因,并提供了多种有效的解决方案,确保集群在高可用性环境下的稳定运行。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
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社区 版权所有