1. startService和bindService的区别

1. startService:

生命周期: onCreate---onStartCommand---onDestory

与服务的通讯: 无法与服务进行直接通讯

与开启者的关系: 服务一旦开启与开启者(activity)将没有什么联系了,就算开启者销毁了,服务依然存活。

在Settings应用界面中有显示

2. binderSerivce

生命周期: onCreate--onBind--onUnBind--onDestory

与服务通讯: 通过内部代理对象间接调用服务的方法

与开启者的关系: 一旦开启者销毁了,那么服务也将随之销毁。

在Settings应用界面无显示

startService和binderSerivce各自的优缺点:

能不能让服务长期运行在后台,并且还能与服务进行通讯

startService : 让服务长期运行在后台,但是无法与服务进行通讯

bindServcie : 可以与服务进行通讯,但是无法长期运行在后台

2. 本地服务通讯(服务运行在当前的应用程序里面)

1. 定义服务

public class ServcieDemo extends Service {}

2. 注册服务

<service android:name="com.itheima.bind.ServcieDemo"></service>

3. 编写服务的方法

/**
* 服务中的内部方法
*/
public void methodInService(String name , int money){
if(money <= ){
Log.d(this, name+"测试1");
}else{
Log.d(this,name+"测试2");
}
}

4. 定义一个内部类

/**
*内部代理对象
*/
class MyBinder extends Binder{
/**
* 内部人员中固有的方法,它的作用就让别人来访问它,然后它自己去访问服务中的方法。
* 通过迂回的手段达到从外部类调用服务中的方法效果。
* @param name
* @param money
*/
public void callMethodInService(String name , int money){
methodInService(name , money);
}
}

5. 服务绑定后返回内部代理对象

/**
* 如果服务成功绑定上了,那么就返回一个通讯频道,
* 返回一个内部代理对象
*/
@Override
public IBinder onBind(Intent intent) {
System.out.println("onBind");
//返回内部代理对象
return new MyBinder();
}

6. 在activity绑定服务

//绑定服务
public void bind(View v) {
Intent service = new Intent(this , ServcieDemo.class);
/**
* 第一个参数:intent对象
* 第二个参数:servcieConnection 用于监听服务当前的状态
* 第三个参数:BIND_AUTO_CREATE 服务自动创建,然后绑定。
*/
bindService(service, new MyConn(), BIND_AUTO_CREATE);
}

7. 在onServcieConnected方法中获取到内部代理对象

/**
* 监听服务的状态,服务是启动还是停止都会收到信息。
*/
class MyConn implements ServiceConnection{
/**
* 如果服务能够成功绑定上,那么这个方法将会调用,启动的参数service就是服务返回的内部对象 MyBinder
*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//获取到服务内部返回的代理对象 ,用binder承接起来
binder = (MyBinder) service;
} @Override
public void onServiceDisconnected(ComponentName name) {}
}

8. 在其他地方调用内部对象中的方法

//调用服务的方法
public void call(View v) {
//通过内部代理对象,调用内部 类中的方法,实际上是调用了服务中的方法
binder.callMethodInService("张三丰", );
}

3. 远程服务通讯(服务运行在其他的应用程序里面,通过AIDL进行通讯)

远程服务通讯Service(Remote--AIDL)

4. 系统服务(服务运行在系统当中,通过getsystemService去调用)

系统服务Service

Android四大组件--服务(Service)的更多相关文章

  1. Android四大组件之Service

    Android四大组件之Service Android支持服务的概念,服务是在后台运行的组件,没有用户界面,Android服务可用有与活动独立的生命周期.Android支持两种类型的服务: 本地服务: ...

  2. 【Android开发日记】之入门篇(五)——Android四大组件之Service

    这几天忙着驾校考试,连电脑都碰不到了,今天总算告一段落了~~Service作为Android的服务组件,默默地在后台为整个程序服务,辅助应用与系统中的其他组件或系统服务进行沟通.它跟Activity的 ...

  3. 入职小白随笔之Android四大组件——服务(Service)

    Service Android多线程编程 当我们在程序中执行一些耗时操作时,比如发起一条网络请求,考虑到网速等原因,服务器未必会立刻响应我们的请求,此时我们就需要将这些操作放在子线程中去运行,以防止主 ...

  4. Android成长日记-Android四大组件之Service组件的学习

    1.什么是Service? Service是Android四大组件中与Activity最相似的组件,它们都代表可执行的程序,Service与Activity的区别在于:Service一直在后台运行,它 ...

  5. Android四大组件之一 -- Service详解

    相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Android程序员如果连Service都没听说过的话,那确实也太逊了.Service作为Android四大组件之一,在每一个应用程序 ...

  6. Android四大组件:Service

    前言 Service作为Android四大组件之一,应用非常广泛 本文将介绍对Service进行全面介绍(基础认识.生命周期.使用和应用场景) 目录 目录 1. 基础知识 定义:服务,属于Androi ...

  7. Android四大组件之Service浅见

    Service 是Android四大组件之一,可以在不显示界面的情况下在后台运行.还有一个作用是通过AIDL来实现进程间通信. Service的启动方式 Service的启动方式有两种,startSe ...

  8. Android 四大组件之service与Broadcast

    Android 四大组件之一:service: Service有五个生命周期:onCreat,onStartCommand, onBind,onUnbind, onDestroy 主要有绑定和非绑定两 ...

  9. Android四大组件之一Service介绍-android学习之旅(十二)

    基本概念: service是android四大组件之一,运行在后台执行耗时操作,并不提供用户界面.其他组件如acticity可以通过startService启动该组件,也可以通过bindService ...

随机推荐

  1. Linux tomcat 添加开机启动

    准备工作:将 jdk-7u80-linux-x64.tar.gz 解压到到 /usr/local/目录下将 apache-tomcat-7.0.82.zip 解压到/opt/etcoud目录下,并切换 ...

  2. visualstudio部分快捷键

    [工具快捷键] Ctrl+Shift+N: 新建项目 Ctrl+Shift+O: 打开项目 Ctrl+Shift+S: 全部保存 Shift+Alt+C: 新建类 Ctrl+Shift+A: 新建项 ...

  3. Unity下的开发框架--适应web和微端游戏异步资源请求的框架

    一.   内容简介: 1.   框架对Web与微端游戏特性的支持: Web和微端游戏最重要的特性是,资源是持续从服务器上即时下载下来的.而保证体验流畅的关键就是保证资源下载分散到持续的体验过程中,并保 ...

  4. java.lang.IllegalStateException: Cannot call sendError() after the response has been committed解读

    源代码: @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Ob ...

  5. 474. Ones and Zeroes

    In the computer world, use restricted resource you have to generate maximum benefit is what we alway ...

  6. Echart自定义属性3

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Generating an arbitrary digit password dictionary

    原理说明:以增量方式从开始到结束! 实现方法:CMD命令 特点:纯数字 语法: FOR /L %variable IN (start,step,end) DO command [command-par ...

  8. 5. STL编程五

    1. STL的六大组件: 容器(Container) 算法(Algorithm) 迭带器(Iterator) 仿函数(Function object) 适配器(Adaptor) 空间配置器(alloc ...

  9. Dubbo自定义日志拦截器

    前言 上一篇文章 Spring aop+自定义注解统一记录用户行为日志 记录了 web层中通过自定义注解配合Spring aop自动记录用户行为日志的过程.那么按照分布式架构中Dubbo服务层的调用过 ...

  10. Flink--Streaming Connectors

    原网址:https://ci.apache.org/projects/flink/flink-docs-release-1.7/dev/connectors/ Predefined Sources a ...