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

最新文章

  1. Xamarin.Android活动的生命周期
  2. css常用公共样式
  3. Google Web Designer – 创建引人入胜的 HTML5 网站
  4. ios基础篇(十六)——UIWebView的基本使用
  5. What is a Statistic?
  6. Freemarker-标签使用
  7. Codeforces378 D Kostya the Sculptor(贪心)(逻辑)
  8. hexo搭建静态博客
  9. USACO1.4.1 Packing Rectangles
  10. windows下游戏服务器端框架Firefly安装说明及demo运行
  11. 配置 VS 2015 开发跨平台手机应用
  12. IOS 掉用系统发短信
  13. 计算机存储负数以及int转byte时-128的出现
  14. [板子]segTree
  15. [ZJOI 2012]灾难
  16. 《http权威指南》读书笔记9
  17. spring_06装配bean_2
  18. AS(Android Studio)不停的updating indices
  19. windows环境下搭建Java开发环境(三)——Maven环境配置使用 (转)
  20. 动态dp 板子

热门文章

  1. c# .NET RSA结合AES加密服务端和客户端请求数据
  2. Sql里时间加减
  3. java学习笔记—标准连接池的实现(27)
  4. HDP Spark2 HIVE3.1 的问题
  5. Generating an arbitrary digit password dictionary
  6. Cause: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierIm Lorg/gradle/api/artifacts/ModuleIdentifier;
  7. SVN版本库备份和恢复
  8. Exponentiation POJ-1001
  9. shell (三) 文件压缩
  10. Linux下C++开发常用命令