服务

  • 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方式开启服务

  1. 采用bind的方法绑定开启服务

     bindService(intent, conn, BIND_AUTO_CREATE);
  2. 服务内部实现一个代理人类
     private class MyBinder2 extends Binder implements IService{}
  3. 定义IService的接口
     服务的中间人想暴露什么方法,就怎么定义接口
  4. 返回代理人对象
         public IBinder onBind(Intent intent) {}
  5. 实现serviceConnection接口里面的方法
     private class MyConn implements ServiceConnection{
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
    myBinder = (IService) service;
    System.out.println("Activity,得到代理人对象");
    }
  6. 调用接口里面的方法

绑定服务的应用常见

  • 提供一个服务,后台运行,里面有一些公共的逻辑供调用.

    1. 微信支付, 微信有一个支付的服务,绑定,调用支付的方法
    2. sony手机,人脸识别的服务,绑定到这个服务,传递一个照片,就会把人脸标记出来
    3. 音乐播放器,后台服务里面播放音乐,绑定服务,暂停,下一曲,上一曲

远程服务&本地服务

  • 远程,服务在别的apk应用程序里面的服务,叫远程服务
  • 本地,服务在你的apk应用程序的内部的服务,叫本地服务

IPC

inter process communication
进程间通讯

AIDL

android interface definition language
安卓接口定义语言,绑定远程服务的写法

  1. 采用bind的方法绑定开启服务

     intent 隐式的意图 intent.setAction("action");
    bindService(intent, conn, BIND_AUTO_CREATE);
  2. 服务内部实现一个代理人类
     定义一个aidl文件,删除public的访问修饰符,修改文件的扩展名为aidl
    private class MyBinder2 extends IService.Sub{}
  3. 定义IService的接口,通过aidl文件生成的
     服务的中间人想暴露什么方法,就怎么定义接口
  4. 返回代理人对象
         public IBinder onBind(Intent intent) {}
  5. 实现serviceConnection接口里面的方法
     private class MyConn implements ServiceConnection{
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
    IService.Sub.asInterface(service);
    System.out.println("Activity,得到代理人对象");
    }
  6. 调用接口里面的方法

Android:关于服务的总结的更多相关文章

  1. 3D语音天气球(源码分享)——在Unity中使用Android语音服务

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 这个项目准备分四部分介绍: 一:创建可旋转的"3D球":3 ...

  2. Android从服务端获取json解析显示在客户端上面

    Android从服务端获取json解析显示在客户端上面 百度经验:jingyan.baidu.com 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Jso ...

  3. [Android] Service服务详解以及如何使service服务不被杀死

    排版上的细节有些不好看,主要是我用的MarkDown编辑器预览和这里的不一样,在那个上面的样式很舒服.这里要改的地方太多就不想改了,将就看吧.下次写的时候注意.还有看到错误给我提啊. 本文链接:htt ...

  4. Android 前台服务

    Android 前台服务 学习自 https://blog.csdn.net/guolin_blog/article/details/11952435#t3 前台服务漫谈 我们之前学习的Service ...

  5. Android Service 服务(三)—— bindService与remoteService

    (转自:http://blog.csdn.net/ithomer/article/details/7366396)   一.bindService简介 bindService是绑定Service服务, ...

  6. Android 位置服务——BaiduLocation的使用

    原文:Android 位置服务--BaiduLocation的使用 版权声明:本文为博主原创文章,欢迎转载,转载请在文章显眼处说明文章出处并给出连接. https://blog.csdn.net/To ...

  7. Android 网络服务介绍

    1. 介绍 Android网络服务主要包括如下四个部分 - ConnectivityService: 提供数据连接管理服务,包括移动数据.WIFI.以太网等 - NetworkPolicyManage ...

  8. android之服务

    android中的进程优先级 前台进程 拥有一个正在与用户交互的Activity(onResume方法被调用) 与一个前台Activity绑定的服务 服务调用了startForeground onCr ...

  9. Android日志服务 记录日志

    转: http://easion-zms.iteye.com/blog/981568 import java.io.BufferedReader; import java.io.File; impor ...

  10. Android本地服务

    一.服务生命周期总结 (一).单独开启服务,并没有绑定服务Activity中调用startService(),服务的lifecycle:onCreate()→onStartCommand()→onSt ...

随机推荐

  1. xml文件查找重复元素(超简单版)

    使用WPS,新建一个表格文件,将xml拖入表格,点数据,选中存在重复项的列,点高亮重复项,OK.

  2. ArcGIS 10.5 named user介绍

    1           Named user概述 1.1    Named user简介 Named user是ArcGIS产品自10.3版本正式推出的一种以用户为中心的授权机制,也称"授权 ...

  3. HDU 4451 Dressing

    HDU 4451 Dressing 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=4451 Description Wangpeng has ...

  4. Acer VN7 Win10小键盘修改

    由于 Home End 正常位置太远, NumberLock 容易误按, 故设置win10 键位映射如下图

  5. https请求时出错:Could not establish trust relationship for the SSL/TLS secure channel

    当我在用NET命名空间下获取URL的时候,提示如下错误: The underlying connection was closed: Could not establish trust relatio ...

  6. android 进程和线程管理

    进程和线程的概念: 进程:程序的运行实例. 线程:cpu调度基本单位. Activity启动的时候,启动一个主线程,两个binder线程. 主线程实如何产生的?ZygoteInit启动,经由一系列调用 ...

  7. ActionBar之style出现Cannot resolve symbol 'Theme' 错误

    今天 2014/03/08 00:49 刚刚升级 android studio 到了 0.5.0 版本,修复了许多 bug,包含当前这个问题,之前一直困扰我很久,莫名奇妙的提示主题样式找不到,无法解析 ...

  8. C#使用IHttpModule接口修改http输出的方法浅谈

    一.但你每次请求浏览一个页面,比如Login.aspx的时候,都会执行配置文件中system.webserver内的model这个节点的东西(这个是属于遍历的逻辑执行,会将model这个节点的东西全部 ...

  9. HTML5根据浏览器获取经度和纬度(百度API)

    网页获取用户位置信息的办法1 调用百度地图的地图标注功能,通过百度地图API获取对应的经度和纬度进而获取地区信息 优点是比较准确,缺点是需要用户自己选择位置2 通过H5 geolocation属性获取 ...

  10. Python 常见错误

    1. def func(): return a=3#错误的用法 2. class a: def func():#func至少要有一个self参数 ........................... ...