Android中的Service介绍和生命周期

来源:互联网 发布:手机怎么制作软件程序 编辑:程序博客网 时间:2024/04/28 17:32

介绍:这篇博文是我很早之前在自己的微信公众号上发表的一片文章, 复习到Service,就拿出来在看看。原文地址:http://mp.weixin.qq.com/s?__biz=MzI5NDMzMjY1MA==&mid=2247483739&idx=1&sn=216500f24e9d51de1f77c4a0b3bb8f07&mpshare=1&scene=1&srcid=0223Si9KFxNqMpbNyRN3OI4N#rd

---------------------------------------------------------------------------------------------正文-----------------------------------------------------------------------------------------------------------------------------------

最近看书,看到Service,感觉对Service好陌生,所以在这里记录一点小笔记啦!

1、什么是Service?

Android官方文档定义:

A Service is an application component representing either an application's desire to perform a longer-running operation while not interacting with the user or to supply functionality for other applications to use. Each service class must have a corresponding <service> declaration in its package'sAndroidManifest.xml. Services can be started with Context.startService() and Context.bindService().

我自己的翻译加理解:

服务是一个应用组件,表现为:当一个应用不与用户交互时,希望执行长期运行的操作;或者是提供功能为其他应用所使用。在包下的AndroidManifest.xml中,每一个Service类必须有一个对用的<service>声明。Service能被Context.startService()或Context.bindService()启动。

2、Service的特征?

 (1)  Service在Android中是一种长生命周期的组件,它是一个类似于没有界面Activity,不实现与用户的交互。

(2)Service一直在后台运行,它没有用户界面,所以绝对不会到前台来。

(3)Service和Activity一样,它完全有自己的生命周期,都在主线程中运行,所以不能在Service中执行一些耗时的操作。

3、启动Service的两种模式

第一种:标准开启模式

在其他组件中调用startService()启动Service。Service一旦通过这种方式启动,访问者与Service之间没有关联,即使访问者退出了,该Service也会无限地运行下去,必须在组件中调用stopService()来停止它。当Service被停止时,系统会销毁它。


第二种:绑定模式启动

当程序通过startService()和stopService()启动、关闭Service时,Service和访问者无法进行通信和数据交换。如果访问者和Service需要通信和交换数据时,应该使用bindService()和unBindService()启动关闭Service。被绑定的Service是当其他组件调用bindService()来创建的。一个Service可以同时和多个访问者绑定,当多个访问者都解除绑定之后,系统会销毁Service.


下面对于绑定模式启动Service,直接上干货,一道简单的试题:

关于ServiceConnection接口的onServiceConnected()方法的触发条件描述正确的是?答案:B
(A)bindService()方法执行成功后
(B)bindService()方法执行成功同时onBind()方法返回非空IBinder对象
(C)Service的onCreate()方法和onBind()方法执行成功之后

(D)Service的onCreat()和onStartCommand()方法启动成功后

4、Service的生命周期

随着应用程序启动Service的方式不同,Service的生命周期也有差异。


当Activity调用bindService()绑定一个已经启动的Service时,系统只是把Service内部IBinder对象传给Activity,并不会把该Service生命周期完全绑定到该Activity,因此当Activity调用unBindService()方法取消与该Service的绑定时,并不能停止该Service。


0 0
原创粉丝点击