`
isiqi
  • 浏览: 16137297 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

android基础知识05:四大组件之service 01

 
阅读更多

本文主要介绍service相关内容。包括两篇文章:

android基础知识05:四大组件之service 01

android基础知识05:四大组件之service 02:远程调用

android基础知识05:四大组件之service 03:实现机制


本文资料来源于网络,参考了最牛网中关于android service的相关分析。

实例程序地址:http://download.csdn.net/detail/xianming01/4131098

http://download.csdn.net/detail/xianming01/4131146

1、什么是service

Service,看名字就知道跟正常理解的“服务”差不多,后台运行,可交互这样的一个东西。它跟Activity的级别差不多,但是他不能自己运行,需要通过某一个Activity或者其他Context对象来调用, Context.startService() 和 Context.bindService()。
两种启动Service的方式有所不同。这里要说明一下的是如果你在Service的onCreate或者onStart做一些很耗时间的事情,最好在Service里启动一个线程来完成,因为Service是跑在主线程中,会影响到你的UI操作或者阻塞主线程中的其他事情。
什么时候需要Service呢?比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务嘛,总是藏在后头的。

Service是在一段不定的时间运行在后台,不和用户交互应用组件。每个Service必须在manifest中 通过<service>来声明。可以通过contect.startservice和contect.bindserverice来启动。
Service和其他的应用组件一样,运行在进程的主线程中。这就是说如果service需要很多耗时或者阻塞的操作,需要在其子线程中实现。
service的两种模式(startService()/bindService()不是完全分离的):
1)本地服务 Local Service 用于应用程序内部。
它可以启动并运行,直至有人停止了它或它自己停止。在这种方式下,它以调用Context.startService()启动,而以调用Context.stopService()结束。它可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。不论调用了多少次startService()方法,你只需要调用一次stopService()来停止服务。
用于实现应用程序自己的一些耗时任务,比如查询升级信息,并不占用应用程序比如Activity所属线程,而是单开线程后台执行,这样用户体验比较好。
2)远程服务 Remote Service 用于android系统内部的应用程序之间。
它可以通过自己定义并暴露出来的接口进行程序操作。客户端建立一个到服务对象的连接,并通过那个连接来调用服务。连接以调用Context.bindService()方法建立,以调用 Context.unbindService()关闭。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。
可被其他应用程序复用,比如天气预报服务,其他应用程序不需要再写这样的服务,调用已有的即可。

2、本地服务

2.1 startservice方式

Service的启动方式一:
启动:Context.startService(new Intent(context,xxx.class));
停止:Context.stopService() ;
我画了一个Service启动的流程图,相信大家一看就懂。Activity通过Intent启动Service,如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。 调用stopService就会触发Service的onDestroy()方法。 图片点击放大~


我们先来介绍一下本地服务的例子。

2.1.1 界面


其中可以播放音乐、暂停、停止等。同时点击finish键可以关闭应用(但服务不关闭,音乐可以继续播放),点击exit推出 应用,同时关闭服务。

2.1.2 音乐播放

2.1.3 service

2.1.4 界面

程序还是蛮简单的,所以不分析了。

运行时可以发现第一次startService时,会调用onCreate和onStart,在没有stopService前,无论点击多少次startService,都只会调用onStart。而stopService时调用onDestroy。再次点击stopService,会发现不会进入service的生命周期的,即不会再调用onCreate,onStart和onDestroy。
而onBind在startService/stopService中没有调用。

2.1 bind service方式
第二种是通过绑定的方式来启动Service。先看流程图,点击放大。


在这里我们使用了this.bindService(intent, myServiceConnection, Context.BIND_AUTO_CREATE); 来启动Service,当Service创建了同时绑定了之后,会回调我们定义的ServiceConnection(),从而传回IBinder接口,我们就能够调用Service中的方法了。这时候Activity就和Service实现了绑定,Activity退出了Service就相应的退出了。

主要代码如下:

MusicService02

ServiceTestServerActivity

运行时,发现调用次序是这样的:
bindService:
1.MusicService02: onCreate
2.MusicService02: onBind
3.Activity: onServiceConnected
unbindService: 只是调用onDestroy
可见,onStart是不会被调用的,而onServiceDisconnected没有调用的原因在上面代码的注释有说明。

此时,activity停止时,service也停止了。

2.2 bind service的一些问题

前面的分析中可以看到Activity和Service,context.startService对应着Service中的onStart()方法,context.onBindService对应的是Service中的onBind()方法。当我们继想绑定一个Service又想在Activity停止时,Service不会停止,我们可以先StartService,然后再BindService()。这时候的流程图如下所示:


此时需要注意一个问题,当Activity退出的时候,Sercvice并不会停止,此时我们可以再进入Activity重新绑定,当这时候Service就会调用onRebind()方法,但是调用onRebind()方法的前提是先前的onUnbind()方法执行成功,但是使用super.onUnbind(intent)是执行不成功的,这时候我们要手动的使其返回true,再次绑定时Rebind()就会执行。否则,如果退出时不显示的指定onUnbind()为成功的话(为false),那么重新启动此Activity来绑定服务时,Service的onBind()方法和onReBind都不会执行,但是ServiceConnection方法确一定会回调了。这说明在Service中的onBind()方法不同于onStart()方法不能被重复调用。

分享到:
评论

相关推荐

    android基础知识05:四大组件之service 01实例程序

    根据博客内容,写的一个android 服务实例程序

    android基础知识05:四大组件之service 01实例程序2

    android service的实例程序,用于博文http://blog.csdn.net/xianming01/article/details/7341877

    android基础知识05:四大组件之service 02:远程调用实例程序

    博文android基础知识05:四大组件之service 02:远程调用中关于远程调用service的实例程序

    【推荐】超全的移动安全自学资料精编合集(43份).zip

    Android安全开发基础: 四大组件之服务 (Service) Android安全开发基础: 四大组件之广播(Broadcast Receiver) Android安全开发基础: 四大组件之内容提供器(Content Provider) Android安全开发基础: 进程间通信...

    Android高薪之路:Android程序员面试宝典 李宁

    6 1 SQLite基础知识 6 2 SQLite 函数 6 2 1 核心函数 6 2 2 日期和时间函数 6 2 3 聚合函数 6 3 在Android中使用SQLite 6 4 面向对象数据库:db4o 第7章 网络与加密 7 1 客户端Socket 7 2 服务端Socket 7 3 非阻塞I ...

    AndroidComponentPlugin:Android上简单实现四大组件的插件化,供学习使用

    Android上简单实现四大组件的插件化说明:此项目仅用于学习插件化基本的实现思路,在此基础上学习理解四大组件的运行机制。实现插件化的重点在于对Android四大组件和资源加载流程的分析和解读。插件化代码的编写,...

    learnandroid:学习之Android之旅

    Android基础知识: --------- example01 --------- v1.0: 完成第一个android程序 --------- example02 --------- 备注:Android 四大核心组建之Activity v2.0:演示android程序生命周期;实现Activity之间的跳转以及...

    ANDROID移动开发基础案例教程

    本书从初学者的角度出发,采用案例驱动式教学方法,对Android基础知识进行讲解。在案例设计上力求贴合实际需求,真正做到把书本上的知识应用到实际开发中,非常适合初学者学习。 本书共10章,第1~2章主要讲解...

    笔试题(Android100选择题).doc

    Android 基础知识点总结 Android 是一种基于 Linux 的开源移动操作系统,主要应用于智能手机和平板电脑等移动设备。Android 系统主要由四大组件组成,即 Activity、Service、BroadcastReceiver 和 ContentProvider...

    Android开发音乐播放器

    其中音乐来源于手机本地,使用了Content Provider获取,播放音乐为了能后台播放,则在Service中实现,Activity和Service之间的通讯则利用了广播来实现,所以这个项目对增强Android基础知识来说是个很好的选择。...

    Android入门基础培训.pptx

    Android 四大组件: Activity、Service、Content Provider、BroadcastReceiver UI及基本布局 数据存储:SharedPreferences、文件、SQLite数据库、网络 Android网络通信 volley,xutils ,fjFrameforandroid,hessian...

    移动安全系列教学下载共43份.zip

    Android安全开发基础--3--四大组件之服务 (Service).pdf Android安全开发基础--4--四大组件之广播(Broadcast Receiver).pdf Android安全开发基础--5--四大组件之内容提供器(Content Provider).pdf Android安全...

    Music_List.zip

    这次用Android实现的音乐播放器工程,可以让大家熟练掌握Android程序开发的基本技术,涉及Android 基础知识、UI界面、数据存储、四大组件、网络编程、高级编程等。综合运用UI界面设计、数据存储、Activity(活动)、...

    Android自主学习项目报告(一).doc

    /res/raw不参加编译的资源,不能生 成对应文件) AndroidManifest.xml 清单文件(声明应用程序属性信息,声明组件,声明权限,唯一一个组件BroadcastRec eiver不需在AndroidManifest中注册) (4)四大组件及其常用...

    Android开发权威指南 第二版

    , 《Android开发权威指南(第二版)》全面介绍了Android应用开发的各种技术,主要内容包括Android的四大应用程序组件(Activity、Service、Content Provider和Broadcast Receiver)、布局、菜单、控件、资源和本地化、...

    Android移动应用基础教程(第2版)电子讲义(全)完整版课件整套教学课件.pptx

    Android程序结构主要包括Activity、Service、Broadcast Receiver、Content Provider四大组件。Activity是用户界面,Service是后台服务,Broadcast Receiver是广播接收器,Content Provider是内容提供器。 6. ...

    Android开发权威指南

    , 《Android开发权威指南(第二版)》全面介绍了Android应用开发的各种技术,主要内容包括Android的四大应用程序组件(Activity、Service、Content Provider和Broadcast Receiver)、布局、菜单、控件、资源和本地化、...

    android实习报告(1).doc

    实习内容: Android主要有四大组件,分别为:Activity 活动、Service 服务、Broadcast receivers 广播接受者、Content Provider 内容提供者。还有上激活组件Intent。 1.Activity Activity就是一个用户可以直接接触...

    Android开发艺术探索.任玉刚(带详细书签).pdf

    3.1 View基础知识 122 3.1.1 什么是View 123 3.1.2 View的位置参数 123 3.1.3 MotionEvent和TouchSlop 125 3.1.4 VelocityTracker、GestureDetector和Scroller 126 3.2 View的滑动 129 3.2.1 使用scrollTo/...

Global site tag (gtag.js) - Google Analytics