博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Service组件
阅读量:5825 次
发布时间:2019-06-18

本文共 1609 字,大约阅读时间需要 5 分钟。

  Service是Android系统提供的四大组件之一,它的地位和Activity的并列的,只不过没有Activity的使用频率高。顾名思义Service就是运行在后台的一种服务程序,一般情况下,很少和用户交互,最大的特点就是没有可视化界面。

          定义一个Service类只要继承Service类,实现其生命周期中的方法就可以了。一个定义好的Service必须在AndroidMainifest.xml配置文件中通过<service>或者使用bindService()方法来绑定一个存在的Service,还可以通过RPC(远程进程调用)机制来实现不同进程间Service的调用。

 Service是什么?        

1、Service 是一个运用程序组件;

2、Service 没有图形化界面;

3、Service通常来处理一些耗时较长的操作;

4、可以使用Service更新Content Provider,发送Intent以及启动系统的通知等等。

Service不是什么?

1、Service不是一个单独的进程;

2、Service不是一个线程。

启动和停止Service

      一旦定义好一个Service就可以在其他组件中启动该Service来使用它了。启动一个Service使用Context.startService(Intent intent)方法,这个与启动Activity类似,也是传递一个Intent。当我们调用startService()方法时,被调用的Service会调用它的onCreate()方法(如果该Service还未创建),接着调用onStart()方法。一旦Service启动后将一直运行知道调用了Context.stopService()或者stopSelf()。

绑定一个已经存在的Service

      我们可以调用startService()方法来启动一个Service方法,也可以通过bindService()方法来绑定一个Service。和调用startService()方法一样,Service会调用onCreate()来创建Service(如果还未创建),但不会调用onStart()方法而是调用onBind()返回客户端一个IBinder接口。绑定Service一般是用在远程Service调用。

       绑定Service需要三个参数:bindService(intent,conn,Service.BIND_AUTO_CREATE);第一个是Intent;第二个是ServiceConnection对象,我们创建该对象实现其onServiceConnected()和onServiceDisconnected()来判断连接成功或断开连接;第三个参数是如何创建Service,一般指定绑定时自动创建。

远程Service调用

       在Android平台中,各个组件运行在自己的进程中。它们之间不能相互访问的,但是在程序之间不可避免地要传递一些对象,在进程之间相互通信。为了实现进程之间的相互通信,Android采用了一种轻量级的实现方式RPC(Remote Procedure Call,远程进程调用)来完成进程之间通信,并且Android通过接口定义语言(Android Interface Definition Language,AIDL)来生成两个进程之间相互访问的代码。例如你在Activity里的代码需要访问Service中的一个方法,那么就可以通过这种方式来实现了。AIDL RPC机制是通过接口来实现的,类似Windows中的COM或者Corba,但它是轻量级的,客户端和被调用实现是通过代理模式实现的。代理类和被代理类实现同一个接口即前面提到的Ibinder。

转载于:https://www.cnblogs.com/xilin/archive/2012/07/29/2613801.html

你可能感兴趣的文章
PyTips 0x02 - Python 中的函数式编程
查看>>
使用《Deep Image Prior》来做图像复原
查看>>
Linux基础命令---rmdir
查看>>
Android图片添加水印图片并把图片保存到文件存储
查看>>
BigDecimal 舍入模式(Rounding mode)介绍
查看>>
开源 免费 java CMS - FreeCMS1.2-标签 infoSign
查看>>
Squid 反向代理服务器配置
查看>>
Java I/O操作
查看>>
Tomcat性能调优
查看>>
Android自学--一篇文章基本掌握所有的常用View组件
查看>>
灰度图像和彩色图像
查看>>
FreeMarker-Built-ins for strings
查看>>
argparse - 命令行选项与参数解析(转)
查看>>
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
spring-boot支持websocket
查看>>
菜鸟笔记(一) - Java常见的乱码问题
查看>>
我理想中的前端工作流
查看>>
记一次Git异常操作:将多个repository合并到同一repository的同一分支
查看>>
Chrome 广告屏蔽功能不影响浏览器性能
查看>>
vSphere 6将于2月2日全球同步发表
查看>>