Android四大组件之Service

Service

What is a Service?

看看官方API的介绍!

What is a Service?
Most confusion about the Service class actually revolves around what it is not:

A Service is not a separate process. The Service object itself does not imply it is running in its own process; unless otherwise specified, it runs in the same process as the application it is part of.
A Service is not a thread. It is not a means itself to do work off of the main thread (to avoid Application Not Responding errors).

服务既不是线程也不是进程,他是一个组件。一个应用程序一般只有一个进程,Service一般就是运行在此主进程主线程里面(也可在清单文件使用android:process进行设置创建其它进程来运行)


Service的启动方式

service的启动方式有两种:

1.startService:

startService:

  • 服务没有启动时会走 onCreate()–>onStartCommand()
    (因为onStare()方法已经过时,所以不执行onStart()方法)
  • 服务已经启动: 此时只会走 onStartCommand() 方法

stopService:

  • 停止服务会走 onDestroy() 方法;

2.bindService:

bindService:

  • 假如服务没有启动时会走 onCreate()–>onBind–>onStartCommand()
    (因为onStare()方法已经过时,所以不执行onStart()方法)
  • 假如服务已经启动: 会走 onBind() –> onStartCommand() 方法

unbindService:

  • 解绑服务会走 onUnbind() –> onDestroy() 方法;

IntentService简介

  • IntentService是Service的子类,比普通的Service增加了额外的功能
  • 它会创建独立的worker线程来处理所有的Intent请求;
  • 会创建独立的worker线程来处理onHandleIntent()方法实现的代码,无需处理多线程问题;
  • 所有请求处理完成后,IntentService会自动停止,无需调用stopSelf()方法停止Service;
  • 为Service的onBind()提供默认实现,返回null;
  • 为Service的onStartCommand提供默认实现,将请求Intent添加到队列中;

服务通信

1、本地服务通信

本地服务通信是指应用程序内部的通信
在使用服务进行本地通信时,首先需要创建一个Service类,该类会提供一个IBind onBind()方法,onBind()方法的返回值IBinder对象会作用参数传递给ServiceConnection类中的onServiceConnection()方法,这样访问者就可以通过IBinder对象与Service进行通信。

2、远程服务通信

远程服务通信是指2个应用程序之间的通信(IPC)
在Android系统中,各个应用程序都运行在自己的进程中,进程之间一般无法直接进行通信,如果想完成不同进程之间的通信,就需要使用远程服务通信。
远程服务通信是通过AIDL(Android Interface Definition Language)实现的,它是一种接口定义语言,其语法格式类似于Java,但是存在几点不同:
1. AIDL定义接口的源代码必须以.aidl结尾
2. AIDL接口中用到的数据类型,除了基本类型,String,List,Map,CharSequence外,其它
类型全部都需要导入包,即使它们在同一个包中
3. AIDL定义接口时,里面的方法不用修饰符,默认是公开的,即去掉public

Service示例

start&stop Service

 Intent intent = new Intent(this,TestService.class)
 Context.startService(intent);//开启服务
 Contxt.stopService(intent);//停止服务

绑定本地服务

MainActivity.java:





MyService.java

远程服务 与 绑定远程服务

调用者 MainActivity.java



服务提供者 :MusicService.java

IMusicService.aidl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值