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


推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
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社区 版权所有