`
地球小野花
  • 浏览: 164560 次
  • 性别: Icon_minigender_1
  • 来自: 马赛大回旋
社区版块
存档分类
最新评论

一个看不到的东西叫Service

 
阅读更多

一个看不到的东西叫Service

官方文档是这么说:

A Service is an application component that can perform long-running operations in the background and does not provide a user interface. Another application component can start a service and it will continue to run in the background even if the user switches to another application. Additionally, a component can bind to a service to interact with it and even perform interprocess communication (IPC). For example, a service might handle network transactions, play music, perform file I/O, or interact with a content provider, all from the background.

 

小结说就是Service是运行在后台的一个组件,它可以“脱离“于应用而单独运行。

 

 

Sevice启动的形式:

 

1.使用 startService()

2.使用 bindService()

 

在探讨StartService之前,先看看它的祖先

 

Service

This is the base class for all services. When you extend this class, it's important that you create a new thread in which to do all the service's work, because the service uses your application's main thread, by default, which could slow the performance of any activity your application is running.

 

IntentService

This is a subclass of Service that uses a worker thread to handle all start requests, one at a time. This is the best option if you don't require that your service handle multiple requests simultaneously. All you need to do is implement onHandleIntent(), which receives the intent for each start request so you can do the background work.

 

Java世界告诉我们,你可以去继承它,然后使用它。具体详细使用不做介绍,可以参考google 官方API。

 

怎么去启动Service呢?之前提过“意图”这东西,使用它你可以启动一个你自己的服务。这些服务可以用于应用程序检测更新、后台广告、通知等等功能。例如Android开机自启动程序onBootReceive之后也是通过一个servcie实现后台运行。这些例子如qq、360的开机自启动。

 

//启动一个叫HelloService的程序,当然HelloService肯定是继承了它祖先Service或者IntentService特征。

//startServcie->onCreate->onStartCommand,通过onStartCommand 来启动它

Intent intent = new Intent(this, HelloService.class);

startService(intent);

 

// 这是一个“漫长“的生命周期 ……

// 最后 stopSelf() , stopService()来停止它。

 

 

继续探讨BoundServcie,直接看官方文档吧。

 

A bound service is one that allows application components to bind to it by calling bindService() in order to create a long-standing connection (and generally does not allow components to start it by calling startService()).

 

//step 1: bindServcie()

 

You should create a bound service when you want to interact with the service from activities and other components in your application or to expose some of your application's functionality to other applications, through interprocess communication (IPC).

 

//step 2: onBind()

To create a bound service, you must implement the onBind() callback method to return an IBinder that defines the interface for communication with the service. Other application components can then call bindService() to retrieve the interface and begin calling methods on the service. The service lives only to serve the application component that is bound to it, so when there are no components bound to the service, the system destroys it (you do not need to stop a bound service in the way you must when the service is started through onStartCommand()).

 

To create a bound service, the first thing you must do is define the interface that specifies how a client can communicate with the service. This interface between the service and a client must be an implementation of IBinder and is what your service must return from the onBind() callback method. Once the client receives the IBinder, it can begin interacting with the service through that interface.

 

Multiple clients can bind to the service at once. When a client is done interacting with the service, it calls unbindService() to unbind. Once there are no clients bound to the service, the system destroys the service.

// 系统不使用了,就会销毁

//step 3:unbindService()

 

There are multiple ways to implement a bound service and the implementation is more complicated than a started service, so the bound service discussion appears in a separate document about Bound Services.

 

 

题外话:IPC通信是一门必修课

 

最后看看两种方式创建的service的生命周期



 

  • 大小: 73.3 KB
分享到:
评论

相关推荐

    通向架构师的道路(第十四天)Axis2 Web Service安全之rampart.docx

    2) 然后呢我们拿着我们的私钥来对着这个得到的杂凑码不管它是MD5还是SHA1,做一个加密运算,就得到了一个“摘要”即Digest。 3) 然后我们把这个摘要和我们的明文一起发送给接收方。 4) 接收方首先用与发送方...

    java8看不到源码-online_exam_system:只是一个测试

    看不到源码在线考试系统使用指南 Create time :2015-04-28 Author Github : Email : 项目结构 .jhipster : 数据库模型配置 .settings : 系统配置 docs : 系统指南和其他设计图片 src : 主文件夹 main : 运行文件夹...

    net命令用法精解(网管不可不看不用的东西)

    - 功能:继续运行一个暂停了的服务。 - 语法: ```plaintext net continue service ``` 8. **net stop** - 功能:停止一个服务。 - 语法: ```plaintext net stop service ``` - 示例: - `...

    ASP.NET Web API 2框架揭秘

    正因为如此,如果使用WCF来构建Web API的话,我们依然需要采用传统的编程方式,Web API的“简单、快捷”完全得不到体现。微软意识到在一个“重量级”通信框架上通过扩展实现“轻量级”的通信,还不如重新构建一个...

    jeecms插件,古老的插件

    没有积分了,1积分算是意思一下...简单的说就是把插件涉及到的文件和目录结构完整的放在一个叫WEB-INF的文件夹下面,然后打包成zip格式即可,当然如有数据库脚本,那插件要正常工作你得把脚本先拿到数据库跑了才可以。

    新版Android开发教程.rar

    也有分析认为,谷歌并不想做一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移 动互联网。----------------------------------- Android 编程基础 4 Android Android Android Android 手机新...

    ios-BLE4.0蓝牙模块管理类.zip

    最近因为有关于BLE 4.0的项目,写了一个管理类。...一个设备只有两个状态,被连接以后就不能去连接和发现其他设备了。 Github地址: https://github.com/leeB0Wen/BLEDemo 有问题可以私聊或者github上戳我

    我自己做的注册表恢复东西 适用强 直接见效

    标题和描述中提到的“注册表恢复东西”指的是在Windows操作系统中进行的一种系统优化或修复方法,主要通过修改注册表键值来解决某些问题或提升系统性能。注册表是Windows的核心数据库,存储着系统和应用程序的配置...

    基于MyEclipse的Java代码生成三层+页面的程序

    (最后说一下:有些人觉得不就是配置一个FreeMarker模板么,根据模板自动生成就OK。是,确实是这样,可是说起来容易,编写起来这样的程序可真就难了,何况我自己拿到源码看了和改了一下就用了4个小时左右!不过作者写...

    C#调用C++底层代码

    但是反过来, C# , VB 能做的,XAML不一定能做到,因为XAML是为了配合开发工具,特别设计出来的一种语言,本身有他的局限性,所以还是得配合正规的程序语言,才能完成一个真正有用的程序。 但是以目前XAML所具备的能力,不...

    C#好东西

    "Listener_665.exe"看起来像是一个Windows可执行文件,可能是一个C#编写的控制台应用或者Windows服务。在C#中,我们可以使用System.Diagnostics命名空间中的Process类来启动、控制或终止进程,比如监听特定事件或...

    二十三种设计模式【PDF版】

    正因为这点不同,导致建筑的管理模式和软件的管理模式就有很多不同, 有些人认识不到这点,就产生了可以大量使用"软件 蓝领"的想法,因为他羡慕建筑中"民工"的低成本. 要知道软件还有一个与建筑截然相反的责任和用途,那...

    个人集成平台

    前段时间学习了一下Prism,感觉应该找个机会实践一下,而且前段时间,贱内(希望我老婆看不到这篇文章:))让我帮她做个定时提醒的小工具,做好之后感觉以前做了好多自己能用的小工具,如果能够整合到一起,该多好,...

    spring-springMVC-mybatis项目

    一个是java文件,一个是xml文件,java文件是定义方法名,xml文件是让你写具体的数据操作方法的,格式就是这样,你看看就能懂,你只需要这样写,这个框架就可以识别,吧你在xml中写的数据库操作方法匹配到java文件中...

    economy-service:经济服务是管理游戏经济的服务

    项目状态:不稳定且被放弃 :dollar_banknote: 经济服务经济服务是管理游戏经济的服务。什么是经济服务?... 看不到所有可用参数,运行./bin/server/server --help 。贡献我们欢迎您的贡献。 阅读我

    带优先级的多任务管理模块(C)

    多任务多线程管理模块,任务有优先级,一个任务执行完毕,按照优先级高低执行另一个任务 1)如何使用: 1. 声明一个HashTaskList,或在栈上动态获取; 2. 调用InitTaskList初始化上一步的HashTaskList 3. 调用...

    java版sm4源码-spring-security-family:关于如何在微服务系统中使用spring-security的demo&分享

    java版sm4源码 spring-security-family A ...展示层:就是这个东西要不要让用户看到,对于用来讲是最直观的,看不到或者不让操作,但是这一层通过一些技术手段是可能被攻破的,用户直接调用接口怎么

    基于微软Azure、.NET Core和Docker的博客系统.zip

    这是一个技术问题,我相信一定有解决方案,但是我也没太多时间和精力去细究如何实现,自己的第一反应也无非是将前后端全部部署在Azure Web App中,然后打开后端的认证机制。但这样做又要花一些额外的工夫。好吧,...

    很有用的东西——设置方面的

    在Windows XP系统中,系统错误报告服务(Error Reporting Service)是一个非常重要的组件,它能够帮助用户诊断并解决程序崩溃等问题。然而,在某些情况下,该服务可能会导致隐私泄露或不必要的数据传输。因此,根据...

    jpetstore spring 的经典完整可直接运行的例子 jpetstore

    总的来说,jpetstore项目是一个极好的学习资源,对于想要深入理解和掌握Spring、iBatis和Struts的人来说,它是不可或缺的实践案例。通过分析和调试这个项目,你不仅可以提升自己的编程技能,还能对Java Web开发的...

Global site tag (gtag.js) - Google Analytics