Android:关于服务的总结
服务
- startService(intent)
- stopService(intent)
服务的生命周期
- 如果采用start的方式开启服务
oncreate()--->onstartcommand()--->onstart()--->onDestroy();
服务如果已经被开启,不会重复的创建,多次调用startService方法,服务的oncreate方法始终只会执行一次.
oncreate()--->onstartcommand()--->onstart()--->onstartcommand()---onstart()--->onDestroy();
服务只会被停止一次,多次的调用stopservice的方法,是无效的.
start的方式可以多次调用 多次开启服务
一旦开启,就没关系了,及时Activity挂了,服务还是很好的在后台运行.
不可以调用服务的方法
- 如果采用的是bind的方式开启服务
oncreate() --->onbind() -->onunbind()---->ondestry();
bind的方式 只可以调用一次,一旦成功绑定了,就不能重复的绑定,否则解绑就会失败
bind的方式, 服务只可以被解绑一次,多次的解绑服务,应用程序会异常退出.
不求同时生,但求同时死.(Activity挂了,服务就挂了)
可以调用服务的方法
混合调用服务的生命周期处理
为了保证服务长期的运行,又想调用服务的方法.
startService() 保证服务长期后台运行
bindService() 绑定服务 ,调用服务的方法
unbindservice() 解绑服务,不需要再去调用方法了
stopService() 停止服务
start方式开启服务的缺点
无法调用服务里面的方法, 无法得到服务的引用
bind方式开启服务
- 采用bind的方法绑定开启服务
bindService(intent, conn, BIND_AUTO_CREATE); - 服务内部实现一个代理人类
private class MyBinder2 extends Binder implements IService{} - 定义IService的接口
服务的中间人想暴露什么方法,就怎么定义接口 - 返回代理人对象
public IBinder onBind(Intent intent) {} - 实现serviceConnection接口里面的方法
private class MyConn implements ServiceConnection{
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myBinder = (IService) service;
System.out.println("Activity,得到代理人对象");
} - 调用接口里面的方法
绑定服务的应用常见
- 提供一个服务,后台运行,里面有一些公共的逻辑供调用.
- 微信支付, 微信有一个支付的服务,绑定,调用支付的方法
- sony手机,人脸识别的服务,绑定到这个服务,传递一个照片,就会把人脸标记出来
- 音乐播放器,后台服务里面播放音乐,绑定服务,暂停,下一曲,上一曲
远程服务&本地服务
- 远程,服务在别的apk应用程序里面的服务,叫远程服务
- 本地,服务在你的apk应用程序的内部的服务,叫本地服务
IPC
inter process communication
进程间通讯
AIDL
android interface definition language
安卓接口定义语言,绑定远程服务的写法
- 采用bind的方法绑定开启服务
intent 隐式的意图 intent.setAction("action");
bindService(intent, conn, BIND_AUTO_CREATE); - 服务内部实现一个代理人类
定义一个aidl文件,删除public的访问修饰符,修改文件的扩展名为aidl
private class MyBinder2 extends IService.Sub{} - 定义IService的接口,通过aidl文件生成的
服务的中间人想暴露什么方法,就怎么定义接口 - 返回代理人对象
public IBinder onBind(Intent intent) {} - 实现serviceConnection接口里面的方法
private class MyConn implements ServiceConnection{
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
IService.Sub.asInterface(service);
System.out.println("Activity,得到代理人对象");
} - 调用接口里面的方法
Android:关于服务的总结的更多相关文章
- 3D语音天气球(源码分享)——在Unity中使用Android语音服务
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 这个项目准备分四部分介绍: 一:创建可旋转的"3D球":3 ...
- Android从服务端获取json解析显示在客户端上面
Android从服务端获取json解析显示在客户端上面 百度经验:jingyan.baidu.com 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Jso ...
- [Android] Service服务详解以及如何使service服务不被杀死
排版上的细节有些不好看,主要是我用的MarkDown编辑器预览和这里的不一样,在那个上面的样式很舒服.这里要改的地方太多就不想改了,将就看吧.下次写的时候注意.还有看到错误给我提啊. 本文链接:htt ...
- Android 前台服务
Android 前台服务 学习自 https://blog.csdn.net/guolin_blog/article/details/11952435#t3 前台服务漫谈 我们之前学习的Service ...
- Android Service 服务(三)—— bindService与remoteService
(转自:http://blog.csdn.net/ithomer/article/details/7366396) 一.bindService简介 bindService是绑定Service服务, ...
- Android 位置服务——BaiduLocation的使用
原文:Android 位置服务--BaiduLocation的使用 版权声明:本文为博主原创文章,欢迎转载,转载请在文章显眼处说明文章出处并给出连接. https://blog.csdn.net/To ...
- Android 网络服务介绍
1. 介绍 Android网络服务主要包括如下四个部分 - ConnectivityService: 提供数据连接管理服务,包括移动数据.WIFI.以太网等 - NetworkPolicyManage ...
- android之服务
android中的进程优先级 前台进程 拥有一个正在与用户交互的Activity(onResume方法被调用) 与一个前台Activity绑定的服务 服务调用了startForeground onCr ...
- Android日志服务 记录日志
转: http://easion-zms.iteye.com/blog/981568 import java.io.BufferedReader; import java.io.File; impor ...
- Android本地服务
一.服务生命周期总结 (一).单独开启服务,并没有绑定服务Activity中调用startService(),服务的lifecycle:onCreate()→onStartCommand()→onSt ...
随机推荐
- rpm 安装包制作
rpm 安装包制作 思路 参照系统自带 etcd 解压->替换掉执行文件->打包 1 预备安装工具 下载工具 yumloader #yum install -y yum-utils 解压工 ...
- androidstudio下载地址
google官网地址 https://developer.android.com/studio/index.html
- mx51的三个framebuffer,mxc_ipuv3_fb.c分析
转载:http://blog.csdn.net/jack_a8/article/details/43309169 mx51支持三个framebuffer:fb0, fb1, fb2 /dev/grap ...
- Linux之top
简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按 ...
- 常用到的简单命令 Sublime Git NPM WindowsCMD MacTerminal(Unix命令)
sublime 选择标签及其内容 ctrl+shift+a连续按两次 Git 撤销 add 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变 git reset [file] 撤销 c ...
- 嗅探js css 文件是否加载成功示例
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...
- CocoaPods 报错 [!] The dependency `JSONModel (~> 1.2.0)` is not used in any concrete target.
当用CocoaPods pod install 时出现了下面的错误时: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; col ...
- 统计C语言程序行数
补充前一篇中统计C语言程序行数的程序 写得比较匆忙,可能有些失误,等弄明白GitHub的用法并完善程序后再补充完整代码链接 没有写成函数,但经过简单修改可以作为一个计算或判断函数使用 判断算法主要为以 ...
- 第二节windows系统下Xshell 5软件远程访问虚拟机 Linux系统
下载Xshell 5软件在windows下安装 安装好后Xshell 5启动软件 下一步,检查虚拟机,配置是否正确 下一步,设置网络,保障虚拟机系统能够连接网络 下一步,进入虚拟机系统,检查虚拟机网络 ...
- php 基础篇 php 进阶篇
1:echo 12*3: 2 echo "Welcome" . " to imooc!";字符串连接. 3>foreach($shuzu as $key ...